diff --git a/.gitignore b/.gitignore
index d76a93b..d30e7dc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -42,9 +42,9 @@ tests/load/results/
# ── Local AI tooling (machine-specific paths) ─────────────────────────────────
.claude/
-# Private operator materials and retirement snapshots (portable protection)
+# Private operator materials and retirement snapshots (portable protection).
+# blog-pipeline/ is tracked so the editorial campaign can be shared and resumed.
/project-docs/
-/blog-pipeline/
/docs/mdify-history/
/.codex-recovery/
diff --git a/blog-pipeline/01-STYLE-RULES.md b/blog-pipeline/01-STYLE-RULES.md
new file mode 100644
index 0000000..e1cdd6f
--- /dev/null
+++ b/blog-pipeline/01-STYLE-RULES.md
@@ -0,0 +1,79 @@
+# 01. Style and Humanization Rules
+
+Write like an engineer who has shipped this explaining it to a peer. Clear,
+specific, opinionated where earned. These rules match the ones LLMiser's Privacy
+Policy and Terms follow, so the whole product speaks with one voice.
+
+`check.mjs` enforces the mechanical rules. The rest is on you.
+
+## Structure
+
+- Start the body with one **TL;DR** line: `**TL;DR:** ...`. Two or three
+ sentences, self-contained. The Blog dialog shows it in its own card.
+- Intro under 120 words. A strong angle in the first sentence and the thesis by
+ the third. No throat-clearing ("In today's fast-paced world...").
+- Every `##` section opens with a 25 to 40 word answer, then the detail.
+- Paragraphs of 2 to 4 sentences. One idea per section.
+- End with `## Frequently Asked Questions` (5 or 6 questions as `###`, each
+ answered in 2 to 4 sentences) and a one-line call to action.
+- Target 1,200 to 2,000 words. The dialog is a reading pane, not a book.
+
+## Punctuation and voice
+
+- **No em dashes.** Use a colon, a period, a comma or "and". Check: `grep -c "—"` is 0.
+- **No semicolons** in prose. The `TL;DR` label is the only allowed one. Code
+ blocks are exempt.
+- Use contractions (you're, it's, don't, we'll).
+- Active voice, present tense where true. Second person ("you") for the reader.
+- Vary sentence length. Mix short punchy sentences with longer ones and never
+ put three sentences of the same length in a row.
+- Bold the primary and secondary keywords on their first natural use only. No
+ forced keyword density.
+- Give one real point of view per `##` section ("in practice", "here's what
+ actually works").
+
+## Banned vocabulary
+
+Rewrite any of these. `check.mjs` flags them outside code blocks.
+
+- **Words:** peril, fraught, thwart, dire, vibrant, bustling, essential, vital,
+ crucial, soul, crucible, tapestry, landscape, pesky, reverberate, enhance,
+ emphasise, delve, revolutionize, folks, foster, labyrinthine, labyrinth,
+ remnant, nestled, symphony, gossamer, enigma, metamorphosis, indelible,
+ embark, navigate, navigating, mastering, elevate, unleash, harness,
+ meticulous, meticulously, complexities, realm, tailored, underpins,
+ everchanging, ever-evolving, daunting, amongst, robust, seamless, seamlessly,
+ leverage, unlock, game-changer, revolutionary, cutting-edge, firstly,
+ moreover, furthermore, additionally, consequently, nonetheless, notably,
+ essentially, subsequently, arguably, ultimately.
+- **Phrases:** "in today's world", "at the end of the day", "needless to say",
+ "it's worth noting", "that being said", "it is advisable", "when it comes
+ to", "in conclusion", "in order to", "not only... but also".
+
+## Visuals
+
+- A banner plus at least 4 figures per article (owner's rule, 2026-10-03).
+ Each figure earns its place: a number comparison, a process, a before and
+ after, or a checklist. No decorative charts.
+- Figure titles are short claims ("Output tokens cost 5x input"), captions
+ name the source or say "Illustration".
+
+## Accuracy (hard rules)
+
+- Every statistic gets a named source and a link where it's used, checked for currency at drafting time. Older primary sources are acceptable when still authoritative.
+- Never fabricate quotes, benchmarks, statistics, authors or token savings.
+- Frame token or size figures as **examples or estimates**. They depend on the
+ document and the tokenizer.
+- Describe only features that exist. Check `03-BRAND-ENTITY.md` and the code.
+- The author is `DevBehindYou` unless a real, named person wrote the piece.
+
+## Final pass
+
+1. Run `node blog-pipeline/check.mjs frontend/content/blog/{slug}.md`
+ and fix every error. Review each warning.
+2. Read the article aloud once. Anything you stumble over, rewrite.
+
+
+## Current roadmap note (4 November 2026)
+
+Use the intent registry and briefs for topic ownership. Keep the existing checker contract, but do not pad an article with unsupported FAQs, figures or claims just to meet a count. If a brief cannot support a useful full article, propose a section in its existing owner instead. These rules do not authorize editing current articles. Public pages render Markdown in addition to the dialog view.
diff --git a/blog-pipeline/02-SEO-GEO.md b/blog-pipeline/02-SEO-GEO.md
new file mode 100644
index 0000000..709cd73
--- /dev/null
+++ b/blog-pipeline/02-SEO-GEO.md
@@ -0,0 +1,42 @@
+# SEO and answer-engine rules
+
+Updated 4 November 2026. Authority for assignments: `intent-registry.json`. Authority for metrics: `research/keyword-evidence.csv`. Research limitations and source links: [research/RESEARCH.md](research/RESEARCH.md).
+
+## Corrected evidence
+
+The previous version attributed a keyword-volume table to Google Keyword Planner on 28 September. Its raw export is not present here and conflicts with the later research account of available access. It is **UNVERIFIED historical material**, preserved in `history/2026-11-04-before-roadmap/02-SEO-GEO.md`, and excluded from prioritization. “LOW” advertiser competition would not mean low organic difficulty anyway.
+
+The 26 October Semrush report for “pdf to markdown” is inherited evidence from `../docs/README_KEYWORD_RESEARCH.md`, not a fresh query. All newly proposed keyword volumes are null/unmeasured. No Ahrefs or Planner keyword dataset was acquired in this task.
+
+## Current publishing behavior
+
+Public `/blog/{slug}` pages are statically generated and also appear in the app dialog. The article helper generates a canonical, BlogPosting and BreadcrumbList. Open Graph and Twitter cards currently use the shared `/og-card.png`, not the article SVG banner. The per-article card idea in a brief is a manual social export until separately implemented.
+
+The parser accepts title, slug, description, excerpt, date, author, category, tags, primaryKeyword, optional secondaryKeywords, banner, bannerAlt, featured, draft and updated. Adding invented `canonical`, `ogImage`, `faqSchema` or `seoTitle` frontmatter does not wire them into the renderer. Primary/secondary keywords are editorial inputs, not a ranking mechanism.
+
+## Page content
+
+- Use the owned task in title, opening and main answer naturally.
+- Keep titles concise; around 60 characters is an editorial target, not a universal pixel rule. Description max 170 is an app constraint. Engines can rewrite either.
+- Answer the question first, then explain scope, steps, evidence and limitations.
+- One H1 is generated from title. Body starts with TL;DR and uses H2/H3.
+- Keywords are not quotas. No hidden text, repetitive synonyms or prompt instructions to search bots.
+- Each substantial claim needs a source, a dated measurement or an explicit illustrative label.
+- Dates reflect actual publication or material revision, not automated freshness.
+- Structured data must agree with visible content. No promised FAQ rich results or special AI schema.
+
+## Search and AI visibility
+
+[Google](https://developers.google.com/search/docs/appearance/ai-features) says established SEO practices apply to its AI features. Indexability and useful, reliable content matter; there is no special AI schema requirement or inclusion guarantee.
+
+[Bing's guidelines](https://www.bing.com/webmasters/help/bing-webmaster-guidelines-30fba23a) reject manipulative promotion and AI manipulation. Write material a reader can verify. Do not plant instructions telling an answer engine to recommend LLMiser.
+
+[DuckDuckGo](https://duckduckgo.com/duckduckgo-help-pages/results/sources) largely sources traditional links from Bing while using other sources too. A Bing result is not proof of a DuckDuckGo position. [Brave](https://search.brave.com/help) describes its own index and AI-generated snippets; inspect it separately.
+
+The existing `llms.txt` can remain a factual discovery file. It is not a substitute for crawlable pages or a guaranteed citation technique. Do not conflate SEO tools (Semrush, Ahrefs, Keyword Planner) with answer engines.
+
+## Links and metadata
+
+Use canonical LLMiser URLs. Give each article a relevant parent and contextual siblings, not mandatory reciprocal links. One useful CTA to the converter is enough. Keep `/usecase` and `/privacy` links where relevant.
+
+Update generated blog index, verify sitemap and maintain the existing `llms.txt` guide list in a publication task. No language-blog duplication, old-host crawl blocks, mass keyword landing pages or external link scheme. See [PUBLISHING.md](PUBLISHING.md).
diff --git a/blog-pipeline/03-BRAND-ENTITY.md b/blog-pipeline/03-BRAND-ENTITY.md
new file mode 100644
index 0000000..a8ae586
--- /dev/null
+++ b/blog-pipeline/03-BRAND-ENTITY.md
@@ -0,0 +1,51 @@
+# LLMiser brand and claims
+
+Updated 4 November 2026. Capabilities below are source-inspected at `8eb8c509`, not freshly conversion-tested for this content pack.
+
+## Identity
+
+**LLMiser**, by **DevBehindYou**. Positioning: **LLM cost optimizer for document inputs**. Tagline: **Make Every Token Count.**
+Canonical origin: https://llmiser.devbehindyou.com
+Repository: https://github.com/DevBehindYou/LLMiser
+License: GPL-3.0. Use the approved study 11 “Prompt L” mark.
+
+LLMiser converts files to editable Markdown so readers can inspect and reduce unnecessary context before using AI. Cost reductions depend on input path, model, workload and retained answer quality. The tool is not provider billing management or an autonomous cost-reduction agent.
+
+Use LLMiser-only current public branding. Historical MDify mentions belong only in explicitly needed provenance. Do not revive markdify.com or use old archive logos/worker counts. Public articles describe reader tasks, not internal database/hosting architecture. Provider documentation can support claims without implying partnerships.
+
+## Capability source map
+
+| Claim | Source to inspect before drafting |
+| --- | --- |
+| Formats, batch/size limits, profiles | `../frontend/lib/formats.js`, `../frontend/lib/siteContent.js` |
+| Upload, review, edit, download flow | `../frontend/components/`, README conversion steps |
+| Retention/privacy | `../frontend/lib/legal/policies.js`, live `/privacy` |
+| Token estimate | `../frontend/lib/documentStats.js` (characters divided by four, rounded) |
+| ZIP outputs/limits | `../backendZ/` and actual fixture outputs |
+| OCR limits/languages | `../backendO/`, public capability copy and readiness |
+| Profiles | Current conversion implementation and original output comparisons |
+| Extension status | `../extension/README.md`, `../docs/ai-handover/HANDOVER.md` |
+
+## What can be described
+
+- Documents: PDF, DOCX, XLSX, XLS, PPTX, EPUB, HTML/HTM, CSV, TSV, JSON, XML, TXT, Markdown.
+- Images: JPG/JPEG, PNG, WebP, TIF/TIFF, BMP, GIF; verify first-frame behavior when discussing animation.
+- Scanned PDF pages use OCR; current configured recognition is English. Six interface languages do not imply six OCR languages or translation.
+- ZIP projects produce combined Markdown and project index/manifest artifacts. Inspect actual contents before explaining fields or completeness.
+- Standard, Clean, Compact and RAG-ready profiles. RAG-ready markers are not an embedding service, vector database, retrieval engine or quality guarantee.
+- Editable output, copy and Markdown/ZIP download. Rough character-based token estimate, not model billing.
+- Current upload limits: 20 files per batch, 15 MiB document/ZIP and 10 MiB image (UI says MB); other decoded-image, archive and scanned-page limits also apply. Do not advertise “unlimited.”
+- Files upload to the service. Link the current privacy policy for retention and exceptions; never claim browser-only conversion or immediate deletion.
+- Extension source exists as a toolbar popup with file conversion and user-triggered Paste. Public store availability and native acceptance are not established by this pack. No extension CTA until checked.
+
+## Never claim
+
+Automatic model routing/caching, guaranteed bill reduction, live provider billing, provider-tokenizer accuracy, automatic LLM submission, translation, multilingual OCR, legacy .doc/.ppt, reverse conversion, flawless tables/formulas/charts, guaranteed image understanding, guaranteed secret detection or complete ZIP extraction.
+
+## Claims and experiments
+
+For token/cost comparisons, record input fixture/hash, representation, model/version, tokenizer or heuristic, price source/date, cached/uncached input, output, OCR/extraction costs and answer-quality criteria. Distinguish a worked example from observed billing. Conversion memory savings are not LLM token savings.
+
+Old model-price and image-token examples in earlier pipeline documents are historical, not preapproved evergreen facts. Recheck official provider documentation before reuse. A smaller input can omit decisive evidence. Explain when the original PDF/chart/image should accompany the text.
+
+Byline is DevBehindYou unless a real contributor is named. Never fabricate test results, quotes, customer stories, authors, review scores or statistics.
diff --git a/blog-pipeline/04-OUTPUT-FORMAT.md b/blog-pipeline/04-OUTPUT-FORMAT.md
new file mode 100644
index 0000000..ce98bda
--- /dev/null
+++ b/blog-pipeline/04-OUTPUT-FORMAT.md
@@ -0,0 +1,35 @@
+# Article and metadata contract
+
+Source of truth: `../frontend/lib/blog.mjs`, `../frontend/lib/articleSeo.mjs`, `../frontend/app/blog/[slug]/page.js`.
+
+Draft in `Blogs/{slug}/draft.md` first. The finished application file is `frontend/content/blog/{slug}.md`. The actual slug must match its filename.
+
+```yaml
+---
+title: "Use the approved registry title"
+slug: "reserved-slug"
+description: "Use the approved description, at most 170 characters."
+excerpt: "A useful one- or two-sentence card summary."
+date: "YYYY-MM-DD"
+author: "DevBehindYou"
+category: "GUIDE"
+tags: ["Document conversion", "Markdown", "AI context"]
+primaryKeyword: "Owned primary phrase"
+secondaryKeywords: ["Relevant variant"]
+banner: "/blog/reserved-slug/banner.svg"
+bannerAlt: "Describe the actual banner."
+featured: false
+draft: true
+---
+```
+
+This is a template, not parser-valid metadata until placeholders are filled. Actual publication date is required; no future-date publishing. Optional `updated` is the real material revision date. Parser supports scalar strings, booleans and flow arrays, not nested YAML. Tags: 3–6. Secondaries: at most four.
+
+Body begins with `**TL;DR:**`. Use H2/H3, simple tables, fenced code only when useful and verified, and ordinary links. A figure is a standalone line:
+``
+
+Keep the existing banner + at least four useful figures rule. SVGs must pass the app safety checks. No figure-count padding with fake charts. Public article pages render Markdown; the app also has its dialog reader.
+
+The app derives canonical/OG/Twitter/BlogPosting metadata. Shared social card is currently `/og-card.png`. Proposed social image exports do not become page metadata automatically. Existing post order is featured first, then newest date, then title, not just newest.
+
+Read [PUBLISHING.md](PUBLISHING.md) before moving anything into the public app. Keep raw sources, local evidence and post drafts in this private workspace.
diff --git a/blog-pipeline/Blogs/Blog List 01.txt b/blog-pipeline/Blogs/Blog List 01.txt
new file mode 100644
index 0000000..ccae2a4
--- /dev/null
+++ b/blog-pipeline/Blogs/Blog List 01.txt
@@ -0,0 +1,231 @@
+1. How to Cut LLM API Costs by 50% Without Reducing Output Quality
+Primary Keyword: reduce LLM API costs
+Secondary Keywords: LLM cost optimization, AI API cost reduction
+Slug URL:
+/blog/reduce-llm-api-costs
+Context Focus:
+A practical cost-optimization guide covering prompt compression, context reduction, model routing, caching, batching, output limits, document preprocessing, and avoiding unnecessary LLM calls. Explain that cost optimization is not simply about switching to a cheaper model—it is about reducing waste throughout the pipeline.
+Meta Description — ~160 characters
+1. Cut LLM API costs without hurting quality using prompt compression, model routing, caching, batching, and smarter context management.
+2. Reduce LLM API spend with better prompts, intelligent model routing, caching, batching, and tighter control over unnecessary token usage.
+3. Learn practical ways to cut LLM API costs by up to 50% using smarter prompts, caching, batching, model selection, and optimized context.
+Meta Description — ~80 characters
+1. Cut LLM API costs with smarter prompts, routing, caching, and batching.
+2. Reduce AI API spending without sacrificing output quality or reliability.
+3. Lower LLM costs by optimizing tokens, models, prompts, and context.
+2. Why Your LLM Token Usage Is So High — and How to Fix It
+Primary Keyword: LLM token usage
+Secondary Keywords: reduce token usage, LLM token optimization
+Slug URL:
+/blog/reduce-llm-token-usage
+Context Focus:
+Explain the less obvious reasons token consumption becomes excessive: raw PDFs, duplicate text, repeated conversation history, oversized system prompts, unnecessary metadata, poor chunk sizes, retrieval duplication, and sending full documents when only a small section is required.
+Meta Description — ~160 characters
+1. Discover why LLM token usage grows so quickly and how raw PDFs, repeated context, oversized prompts, duplicate text, and poor chunking drive costs.
+2. High token usage often comes from document noise, repeated context, oversized prompts, and weak chunking. Learn how to identify and reduce the waste.
+3. Find the hidden causes of excessive LLM token usage and fix inefficient prompts, noisy documents, repeated context, and poor chunking strategies.
+Meta Description — ~80 characters
+1. Find the hidden causes of high LLM token usage and reduce wasted context.
+2. Reduce token waste from raw PDFs, repeated prompts, and weak chunking.
+3. Fix oversized prompts and duplicated context that inflate your LLM bill.
+3. Markdown vs Raw PDFs: Which Format Uses Fewer LLM Tokens?
+Primary Keyword: Markdown vs PDF for LLM
+Secondary Keywords: PDF to Markdown for AI, reduce LLM tokens
+Slug URL:
+/blog/markdown-vs-pdf-llm-tokens
+Context Focus:
+Compare what an LLM actually receives from poorly extracted PDFs versus clean structured Markdown. Cover headers, footers, repeated page text, broken reading order, OCR artifacts, tables, whitespace/layout noise, tokenization, chunking, and RAG suitability.
+This is one of the strongest topics for naturally demonstrating why MarkDify exists without turning the article into an advertisement.
+Meta Description — ~160 characters
+1. Compare Markdown and raw PDFs for LLM workflows and see how cleaner structure, less layout noise, and better chunking can reduce token usage and cost.
+2. Learn why structured Markdown gives LLMs cleaner context than raw PDFs, improving chunking while reducing layout noise and unnecessary tokens.
+3. Markdown can make documents more efficient for LLMs. Compare token usage, structure, chunking quality, document noise, and downstream AI costs.
+Meta Description — ~80 characters
+1. Compare Markdown vs PDF for cleaner LLM context and lower token usage.
+2. See why Markdown can reduce document noise and improve LLM chunking.
+3. Markdown or PDF? Compare token efficiency, structure, and AI costs.
+4. The Real Cost of RAG: Embeddings, Tokens, Retrieval, and Re-Ranking Explained
+Primary Keyword: RAG cost
+Secondary Keywords: RAG cost optimization, RAG token usage
+Slug URL:
+/blog/rag-cost-optimization
+Context Focus:
+Break down the complete economics of a RAG request instead of discussing only LLM output tokens:
+Document ingestion
+→ parsing
+→ chunking
+→ embeddings
+→ vector storage
+→ retrieval
+→ reranking
+→ context construction
+→ LLM input tokens
+→ output tokens
+
+Then explain where optimization actually provides meaningful savings without destroying retrieval quality.
+Meta Description — ~160 characters
+1. Break down the real cost of RAG, from embeddings and retrieval to reranking and LLM tokens, and learn where to optimize without hurting relevance.
+2. Understand where RAG systems spend money across embeddings, vector search, reranking, context windows, and generation—and how to reduce waste.
+3. Explore the true cost of RAG pipelines and optimize embeddings, retrieval, reranking, context size, and generation without sacrificing relevance.
+Meta Description — ~80 characters
+1. Understand the real cost of RAG across embeddings, retrieval, and tokens.
+2. See where RAG pipelines spend money and how to safely reduce waste.
+3. Break down RAG costs from embeddings to reranking and generation.
+5. Stop Sending Entire Documents to AI: Build a Smarter Document-to-LLM Pipeline
+Primary Keyword: document to LLM pipeline
+Secondary Keywords: LLM document processing, AI document pipeline
+Slug URL:
+/blog/document-to-llm-pipeline
+Context Focus:
+Show the difference between this:
+100-page PDF
+→ send everything to LLM
+
+and this:
+Document
+→ extract
+→ clean
+→ structure
+→ chunk
+→ metadata
+→ index
+→ retrieve relevant chunks
+→ selective context
+→ LLM
+
+Discuss PDFs containing native text + scans, document normalization, Markdown conversion, metadata-aware chunking, retrieval, context assembly, and token reduction.
+Meta Description — ~160 characters
+1. Stop sending entire documents to LLMs. Build a smarter pipeline with parsing, cleanup, chunking, metadata, retrieval, and selective context injection.
+2. Replace full-document prompting with a smarter AI pipeline that parses, cleans, chunks, retrieves, and sends only the context your LLM actually needs.
+3. Build an efficient document-to-LLM pipeline using parsing, structured cleanup, chunking, metadata, retrieval, and selective context injection.
+Meta Description — ~80 characters
+1. Build a smarter document-to-LLM pipeline instead of sending whole files.
+2. Parse, clean, chunk, retrieve, and send only the context your LLM needs.
+3. Stop sending full documents to AI and reduce token waste with retrieval.
+B. Medium Blog Topics
+These should feel more opinionated and curiosity-driven than your MDify SEO articles.
+6. Your LLM Bill Is Probably 2× Higher Than It Needs to Be
+Primary Keyword: LLM API cost
+Secondary Keywords: AI API costs, LLM cost optimization
+Slug URL:
+/blog/why-your-llm-bill-is-too-high
+Medium Title:
+Your LLM Bill Is Probably 2× Higher Than It Needs to Be
+Context Focus:
+An accessible engineering/business article about hidden AI spending. Instead of starting with complex optimization techniques, start with a typical LLM request and progressively reveal where waste occurs:
+duplicated system prompt
++ repeated conversation
++ raw documents
++ irrelevant retrieval
++ unnecessarily powerful model
++ oversized output
+= expensive request
+
+Then give readers a framework for auditing their AI costs.
+Meta Description — ~160 characters
+1. Your LLM bill may be far higher than necessary. Find hidden token waste and practical ways to cut API costs without sacrificing output quality.
+2. LLM costs grow through repeated context, oversized prompts, poor routing, and unnecessary tokens. Learn how to identify and eliminate the waste.
+3. Think your LLM bill is too high? See how token waste, poor model routing, repeated prompts, and bloated context quietly increase API spending.
+Meta Description — ~80 characters
+1. Your LLM bill may be 2× too high. Find the hidden token waste.
+2. See what's quietly inflating your LLM API bill and how to reduce it.
+3. Find hidden LLM cost leaks in prompts, context, routing, and tokens.
+7. PDFs Are Expensive for AI — Here’s Why
+Primary Keyword: PDF LLM tokens
+Secondary Keywords: PDF processing for AI, PDF to Markdown
+Slug URL:
+/blog/why-pdfs-are-expensive-for-ai
+Medium Title:
+PDFs Are Expensive for AI — Here’s Why
+Context Focus:
+Explain that the problem isn't necessarily the PDF file itself; it's what happens during extraction.
+Show examples of:
+repeated headers
+repeated footers
+broken columns
+OCR garbage
+page numbers
+duplicated text
+incorrect reading order
+table fragmentation
+
+Then explain why converting a document into structured Markdown before chunking/indexing can produce cleaner AI input.
+This is probably the best Medium topic for organically introducing MarkDify.
+Meta Description — ~160 characters
+1. Raw PDFs can be expensive for AI. Learn how layout noise, duplicate text, OCR artifacts, and poor structure increase LLM token usage and costs.
+2. PDFs often contain layout noise, broken reading order, repeated text, and OCR artifacts. See why preprocessing can reduce LLM token consumption.
+3. Why are PDFs expensive for AI? Explore how document noise and weak structure increase tokens, hurt chunking, and raise downstream LLM costs.
+Meta Description — ~80 characters
+1. Why PDFs cost more for AI: layout noise, OCR artifacts, and extra tokens.
+2. See how raw PDF structure can quietly increase your LLM token usage.
+3. PDFs add noise to AI workflows. See where the extra token cost comes from.
+8. The Hidden Token Tax in RAG Pipelines
+Primary Keyword: RAG token optimization
+Secondary Keywords: RAG token cost, RAG context optimization
+Slug URL:
+/blog/hidden-token-tax-rag-pipelines
+Medium Title:
+The Hidden Token Tax in RAG Pipelines
+Context Focus:
+Most developers focus on embedding cost or model pricing. This article should show that the bigger recurring problem can be inefficient retrieval/context construction:
+Question
+↓
+Retrieve 20 chunks
+↓
+5 chunks contain similar information
+↓
+large chunks contain irrelevant paragraphs
+↓
+reranker keeps too much
+↓
+8,000 tokens injected
+↓
+LLM only needed ~1,500
+
+Cover:
+- chunk size
+- overlap
+- duplicate retrieval
+- top-K
+- reranking
+- metadata filtering
+- Markdown/document cleanliness
+- contextual compression
+- token budgets
+- retrieval quality vs cost
+Meta Description — ~160 characters
+1. RAG pipelines can waste tokens before generation even starts. Learn how chunking, retrieval, reranking, duplication, and oversized context increase costs.
+2. The hidden token tax in RAG comes from weak chunking, duplicate retrieval, oversized context, and unnecessary reranking. Learn how to reduce it.
+3. See where RAG pipelines quietly waste tokens across chunking, retrieval, reranking, and context assembly—and how to make them more efficient.
+Meta Description — ~80 characters
+1. Find the hidden token tax in RAG across chunking, retrieval, and context.
+2. See how RAG wastes tokens before the model even starts generating output.
+3. Reduce RAG token waste from duplicate retrieval and oversized context.
+Suggested publishing sequence
+For MDify, I would publish them in this order:
+Markdown vs Raw PDFs → High LLM Token Usage → Document-to-LLM Pipeline → LLM API Cost Cutting → Real Cost of RAG.
+That creates a natural topic cluster:
+ LLM Cost Optimization
+ │
+ ┌──────────────────┼──────────────────┐
+ │ │ │
+ Token Usage Document Processing RAG
+ │ │ │
+ │ PDF → Markdown │
+ │ │ │
+ └──────── Document-to-LLM ────────────┘
+
+For Medium, use the more clickable articles to lead readers toward the detailed MDify content:
+PDFs Are Expensive for AI
+ ↓
+Markdown vs Raw PDFs
+
+Your LLM Bill Is 2× Too High
+ ↓
+How to Cut LLM API Costs
+
+The Hidden Token Tax in RAG
+ ↓
+The Real Cost of RAG
+
+That gives you both Medium discovery traffic and a connected SEO content cluster on MDify.
\ No newline at end of file
diff --git a/blog-pipeline/Blogs/Blog List 02.txt b/blog-pipeline/Blogs/Blog List 02.txt
new file mode 100644
index 0000000..1af225d
--- /dev/null
+++ b/blog-pipeline/Blogs/Blog List 02.txt
@@ -0,0 +1,437 @@
+# 1. 7 Hidden Reasons Your LLM Bill Is 2× Higher Than It Should Be
+
+**Title:**
+7 Hidden Reasons Your LLM Bill Is 2× Higher Than It Should Be
+
+**Primary Keyword:**
+LLM cost optimization
+
+**Secondary Keywords:**
+- reduce LLM costs
+- AI API cost optimization
+
+**LSI Keywords:**
+1. LLM API pricing
+2. token consumption
+3. AI inference costs
+4. prompt optimization
+5. context window optimization
+6. model routing
+7. prompt caching
+8. token reduction
+9. AI infrastructure costs
+10. generative AI expenses
+
+**Meta Description: (160 char)**
+Discover 7 hidden reasons your LLM costs are higher than expected and learn how to reduce wasted tokens, prompts, context, and expensive model calls.
+
+**Meta Description: (80 char)**
+7 hidden causes of high LLM costs and practical ways to reduce AI spending.
+
+**Slug URL:**
+`/blog/hidden-reasons-llm-costs-are-high`
+
+**Context:**
+Many AI applications overspend because developers focus only on model pricing while ignoring repeated prompts, oversized context, duplicated retrieval, raw documents, unnecessary output tokens, and poor model selection.
+
+**Scope:**
+Cover token waste, prompt size, duplicated context, raw document ingestion, excessive RAG retrieval, expensive model usage, response length, caching, and inefficient retry strategies.
+
+**Why we needs this blog:**
+This is a broad top-of-funnel article that attracts developers, founders, and AI teams struggling with rising API bills and naturally introduces MarkDify as part of the document-preprocessing solution.
+
+---
+
+# 2. Cut AI API Costs by Up to 70%: 9 LLM Optimization Strategies That Actually Matter
+
+**Title:**
+Cut AI API Costs by Up to 70%: 9 LLM Optimization Strategies That Actually Matter
+
+**Primary Keyword:**
+reduce AI API costs
+
+**Secondary Keywords:**
+- LLM cost optimization
+- reduce token usage
+
+**LSI Keywords:**
+1. AI API pricing
+2. LLM token costs
+3. prompt compression
+4. model routing
+5. semantic caching
+6. batching AI requests
+7. context pruning
+8. cheaper LLM models
+9. AI cost management
+10. prompt engineering costs
+
+**Meta Description: (160 char)**
+Learn 9 practical ways to reduce AI API costs using model routing, caching, prompt compression, batching, context pruning, and smarter document processing.
+
+**Meta Description: (80 char)**
+9 practical strategies to reduce AI API costs without sacrificing output quality.
+
+**Slug URL:**
+`/blog/reduce-ai-api-costs-llm-optimization`
+
+**Context:**
+AI cost reduction is rarely about one trick. Meaningful savings come from optimizing the full request lifecycle—from document ingestion and prompt construction to model selection and output generation.
+
+**Scope:**
+Cover prompt compression, caching, batching, smaller models, model routing, selective context, output limits, document preprocessing, retrieval optimization, and monitoring.
+
+**Why we needs this blog:**
+This directly supports MarkDify's core positioning around lowering unnecessary token consumption. Any “up to 70%” claim should be supported by clearly documented benchmarks or framed as workflow-dependent.
+
+---
+
+# 3. What % of AI Users Still Use Free Plans in 2026? What the Data Really Says
+
+**Title:**
+What % of AI Users Still Use Free Plans in 2026? What the Data Really Says
+
+**Primary Keyword:**
+free AI users 2026
+
+**Secondary Keywords:**
+- free vs paid AI
+- AI adoption statistics
+
+**LSI Keywords:**
+1. ChatGPT free users
+2. AI subscription trends
+3. generative AI adoption
+4. paid AI users
+5. AI usage statistics
+6. AI market trends
+7. consumer AI adoption
+8. AI tool subscriptions
+9. freemium AI tools
+10. AI user behavior
+
+**Meta Description: (160 char)**
+Explore what current data says about free vs paid AI usage in 2026, why users stay on free plans, and what drives upgrades to premium AI services.
+
+**Meta Description: (80 char)**
+Free vs paid AI in 2026: usage trends, adoption data, and upgrade behavior.
+
+**Slug URL:**
+`/blog/free-vs-paid-ai-users-2026`
+
+**Context:**
+Free AI tools remain an important entry point into generative AI, while paid plans compete on better models, larger limits, speed, file processing, and advanced capabilities.
+
+**Scope:**
+Use current research to compare free and paid AI adoption, regional trends, consumer behavior, upgrade motivations, pricing sensitivity, and differences between casual and professional users.
+
+**Why we needs this blog:**
+This can attract a broader AI audience beyond developers and create a data-driven entry point for discussing why efficient tools such as MarkDify matter even for users trying to avoid premium AI costs.
+
+---
+
+# 4. Free AI vs Paid AI: 10 Things You Actually Pay For Beyond Better Models
+
+**Title:**
+Free AI vs Paid AI: 10 Things You Actually Pay For Beyond Better Models
+
+**Primary Keyword:**
+free AI vs paid AI
+
+**Secondary Keywords:**
+- AI subscription benefits
+- paid AI tools
+
+**LSI Keywords:**
+1. ChatGPT free vs paid
+2. AI pricing plans
+3. premium AI features
+4. context window limits
+5. AI rate limits
+6. AI file uploads
+7. advanced AI models
+8. AI privacy features
+9. AI agent capabilities
+10. generative AI subscriptions
+
+**Meta Description: (160 char)**
+Free vs paid AI is about more than better models. Compare 10 differences including context limits, speed, file support, privacy, agents, and usage caps.
+
+**Meta Description: (80 char)**
+10 real differences between free and paid AI beyond access to better models.
+
+**Slug URL:**
+`/blog/free-ai-vs-paid-ai`
+
+**Context:**
+Users often assume paid AI subscriptions simply unlock better models, while the real differences can include context limits, file handling, integrations, speed, rate limits, privacy features, and agent capabilities.
+
+**Scope:**
+Compare model access, rate limits, context size, uploads, multimodality, agents, integrations, response speed, privacy options, memory, and professional workflows.
+
+**Why we needs this blog:**
+It targets high-volume comparison searches and gives MarkDify an opportunity to demonstrate how specialized tools can improve workflows without requiring users to rely entirely on premium chatbot capabilities.
+
+---
+
+# 5. Can ChatGPT, Gemini, and DeepSeek Really Analyze a ZIP File? 7 Things You Should Know
+
+**Title:**
+Can ChatGPT, Gemini, and DeepSeek Really Analyze a ZIP File? 7 Things You Should Know
+
+**Primary Keyword:**
+AI analyze ZIP file
+
+**Secondary Keywords:**
+- ChatGPT ZIP file
+- Gemini ZIP file analysis
+
+**LSI Keywords:**
+1. DeepSeek ZIP upload
+2. AI codebase analysis
+3. ZIP project analysis
+4. analyze code with AI
+5. AI file upload limits
+6. nested ZIP files
+7. source code analysis AI
+8. project structure analysis
+9. AI context window
+10. document preprocessing
+
+**Meta Description: (160 char)**
+Can ChatGPT, Gemini, or DeepSeek analyze complex ZIP files? Explore nested folders, codebases, token limits, binaries, context loss, and preprocessing.
+
+**Meta Description: (80 char)**
+Can AI really analyze ZIP files? Learn the limits of projects, nesting, and context.
+
+**Slug URL:**
+`/blog/can-ai-analyze-zip-files`
+
+**Context:**
+Uploading a ZIP is not the same as reliably understanding an entire project. Large archives contain nested folders, binaries, dependencies, images, documents, and files that may exceed practical AI context limits.
+
+**Scope:**
+Compare ZIP/file handling conceptually across major AI tools, discuss nested projects, source code, binaries, token limits, context loss, project indexing, recursive extraction, and safer preprocessing.
+
+**Why we needs this blog:**
+This is highly aligned with MarkDify's recursive ZIP architecture and can show why preprocessing a project into structured, AI-ready content is more reliable than blindly sending an archive to a chatbot.
+
+---
+
+# 6. 1 ZIP, 500 Files, 4 AI Workers: How MDify Processes Complex Projects Without Blowing Up Token Costs
+
+**Title:**
+1 ZIP, 500 Files, 4 AI Workers: How MDify Processes Complex Projects Without Blowing Up Token Costs
+
+**Primary Keyword:**
+ZIP file to Markdown
+
+**Secondary Keywords:**
+- AI project file converter
+- codebase to Markdown
+
+**LSI Keywords:**
+1. project ZIP converter
+2. recursive file processing
+3. nested archive processing
+4. AI codebase preparation
+5. document classification
+6. OCR pipeline
+7. Markdown project export
+8. AI project ingestion
+9. LLM project analysis
+10. token-efficient documents
+
+**Meta Description: (160 char)**
+See how MDify can inspect complex ZIP projects, classify code, documents and images, process them safely in parallel, and create structured AI-ready output.
+
+**Meta Description: (80 char)**
+How MDify processes complex ZIP projects into structured, AI-ready Markdown.
+
+**Slug URL:**
+`/blog/how-mdify-processes-complex-zip-projects`
+
+**Context:**
+Complex software projects are not single documents. A project archive can contain code, PDFs, screenshots, nested archives, binary files, dependencies, and documentation requiring different processing strategies.
+
+**Scope:**
+Explain the Safe Archive Inspector, directory tree, recursive classifier, N1/N2 normal processing, O1/O2 OCR, hybrid PDF processing, nested archive safety, project merger, Supabase Storage, and structured outputs.
+
+**Why we needs this blog:**
+This is a product-engineering article that differentiates MDify technically and demonstrates how its architecture handles workloads generic document converters and chat interfaces may struggle with.
+
+---
+
+# 7. A 100-Page PDF Shouldn’t Cost 100 Pages of Tokens: 6 Smarter Ways to Process Documents for AI
+
+**Title:**
+A 100-Page PDF Shouldn’t Cost 100 Pages of Tokens: 6 Smarter Ways to Process Documents for AI
+
+**Primary Keyword:**
+PDF token optimization
+
+**Secondary Keywords:**
+- PDF to Markdown for AI
+- reduce PDF LLM tokens
+
+**LSI Keywords:**
+1. PDF LLM processing
+2. AI document preprocessing
+3. scanned PDF OCR
+4. PDF text extraction
+5. document chunking
+6. Markdown conversion
+7. selective retrieval
+8. RAG PDF processing
+9. context window optimization
+10. document token reduction
+
+**Meta Description: (160 char)**
+A 100-page PDF does not need to become 100 pages of LLM context. Learn 6 ways to extract, clean, chunk, OCR, retrieve, and optimize documents.
+
+**Meta Description: (80 char)**
+6 smarter ways to process large PDFs without wasting your LLM context window.
+
+**Slug URL:**
+`/blog/optimize-pdf-llm-token-usage`
+
+**Context:**
+Large PDFs often contain information the user never needs for a specific AI request. Native text, scanned pages, images, repeated headers, and irrelevant sections should be processed differently.
+
+**Scope:**
+Cover page-level analysis, native extraction, OCR only where required, Markdown normalization, semantic chunking, retrieval, metadata, and selective context injection.
+
+**Why we needs this blog:**
+PDF optimization is one of the clearest real-world examples of MDify's value and gives you a natural path to explain the hybrid PDF architecture without making the article overly promotional.
+
+---
+
+# 8. RAG Is Not Cheap by Default: 8 Places Your Pipeline Quietly Wastes Money
+
+**Title:**
+RAG Is Not Cheap by Default: 8 Places Your Pipeline Quietly Wastes Money
+
+**Primary Keyword:**
+RAG cost optimization
+
+**Secondary Keywords:**
+- reduce RAG costs
+- RAG token optimization
+
+**LSI Keywords:**
+1. RAG pipeline cost
+2. vector database costs
+3. embedding costs
+4. reranking costs
+5. retrieval optimization
+6. chunk size optimization
+7. context compression
+8. top K retrieval
+9. LLM context cost
+10. semantic search cost
+
+**Meta Description: (160 char)**
+RAG systems can waste money on embeddings, duplicate retrieval, reranking, oversized chunks, and LLM context. Explore 8 common cost leaks and fixes.
+
+**Meta Description: (80 char)**
+8 hidden places your RAG pipeline wastes money and how to optimize them.
+
+**Slug URL:**
+`/blog/rag-cost-optimization-hidden-waste`
+
+**Context:**
+RAG is often described as a cost-efficient way to work with proprietary data, but poorly designed ingestion, retrieval, and context assembly can make it unnecessarily expensive.
+
+**Scope:**
+Cover embeddings, chunking, overlap, top-K, reranking, duplicate retrieval, vector storage, context construction, model routing, caching, and document quality.
+
+**Why we needs this blog:**
+RAG users are a core audience for MDify because structured Markdown and cleaner document ingestion can directly improve chunk quality and reduce unnecessary downstream context.
+
+---
+
+# 9. Why Sending Entire Documents to an LLM Can Waste 60%+ of Your Context Window
+
+**Title:**
+Why Sending Entire Documents to an LLM Can Waste 60%+ of Your Context Window
+
+**Primary Keyword:**
+LLM context window optimization
+
+**Secondary Keywords:**
+- reduce LLM context
+- document token optimization
+
+**LSI Keywords:**
+1. context window usage
+2. LLM token waste
+3. document preprocessing
+4. selective context injection
+5. AI document chunking
+6. RAG retrieval
+7. prompt context reduction
+8. duplicate document text
+9. raw PDF tokens
+10. LLM context management
+
+**Meta Description: (160 char)**
+Sending whole documents to an LLM can fill context with duplicate and irrelevant text. Learn how preprocessing, retrieval, and chunking reduce token waste.
+
+**Meta Description: (80 char)**
+Stop wasting LLM context on full documents, duplicates, and irrelevant text.
+
+**Slug URL:**
+`/blog/stop-sending-entire-documents-to-llms`
+
+**Context:**
+Long context windows make it tempting to send complete documents directly to an LLM, but larger context does not automatically mean more efficient or better AI output.
+
+**Scope:**
+Discuss irrelevant sections, duplicate headers, OCR noise, long-context costs, selective retrieval, semantic chunking, metadata filtering, preprocessing, and clean Markdown.
+
+**Why we needs this blog:**
+This directly explains the problem MDify solves before the LLM receives the document. The **60%+ figure should only remain if supported by your own published benchmark data**; otherwise use a non-numeric title.
+
+---
+
+# 10. From Raw Files to AI-Ready Context: 5 Layers Behind MDify’s Architecture
+
+**Title:**
+From Raw Files to AI-Ready Context: 5 Layers Behind MDify’s Architecture
+
+**Primary Keyword:**
+AI document processing architecture
+
+**Secondary Keywords:**
+- document to LLM pipeline
+- AI-ready Markdown
+
+**LSI Keywords:**
+1. MDify architecture
+2. document conversion pipeline
+3. hybrid PDF processing
+4. OCR architecture
+5. ZIP project processing
+6. Supabase Storage
+7. document classification
+8. LLM document ingestion
+9. RAG document pipeline
+10. content-aware processing
+
+**Meta Description: (160 char)**
+Explore the 5 layers behind MDify, from content-aware analysis and hybrid PDF processing to recursive ZIP conversion, OCR, parallel workers, and storage.
+
+**Meta Description: (80 char)**
+Explore the 5 architecture layers that turn raw files into AI-ready context.
+
+**Slug URL:**
+`/blog/mdify-ai-document-processing-architecture`
+
+**Context:**
+MDify is designed as more than a PDF-to-Markdown converter. Its architecture analyzes content, routes work intelligently, processes complex files in parallel, and returns structured AI-ready outputs.
+
+**Scope:**
+Explain five major layers: ingestion/storage, content analysis, normal/OCR processing pools, hybrid PDF and recursive ZIP processing, and ordered/project-level output generation.
+
+**Why we needs this blog:**
+This becomes a flagship technical article for MDify, establishes engineering credibility, supports product discovery, and gives developers a deeper reason to trust the platform beyond its marketing claims.
\ No newline at end of file
diff --git a/blog-pipeline/Blogs/README.md b/blog-pipeline/Blogs/README.md
new file mode 100644
index 0000000..fd9ba53
--- /dev/null
+++ b/blog-pipeline/Blogs/README.md
@@ -0,0 +1,14 @@
+# Blogs
+
+One working folder per article, named after its slug:
+
+```
+Blogs/{slug}/
+ research.md keyword and SERP notes: queries, country, language, date, gaps
+ outline.md title, TL;DR, sections, FAQs, frontmatter draft
+ sources.md every source behind a claim, with its date
+ tests/ saved evidence for any first-hand test or benchmark you cite
+```
+
+The finished article does not live here. It goes to
+`frontend/content/blog/{slug}.md` (see `../04-OUTPUT-FORMAT.md`).
diff --git a/blog-pipeline/Blogs/document-to-llm-pipeline/sources.md b/blog-pipeline/Blogs/document-to-llm-pipeline/sources.md
new file mode 100644
index 0000000..4821bff
--- /dev/null
+++ b/blog-pipeline/Blogs/document-to-llm-pipeline/sources.md
@@ -0,0 +1,34 @@
+# document-to-llm-pipeline
+
+## Keyword notes
+
+Primary and secondary keywords come from the owner's brief in `Blogs/Blog List 01.txt`.
+Search volumes were NOT measured for these terms in this session (no Keyword Planner
+access). Re-check them before investing in more articles on the same cluster.
+
+## Sources (all accessed 2026-10-03)
+- PDF support: https://platform.claude.com/docs/en/build-with-claude/pdf-support (each page as image + extracted text; 1,500-3,000 text tokens per page; Bedrock: ~1,000 tokens text-only vs ~7,000 full visual for a 3-page PDF)
+- Anthropic, Introducing Contextual Retrieval, 2024-09-19: https://www.anthropic.com/news/contextual-retrieval (-35% / -49% / -67% top-20 retrieval failure rate; $1.02 per million document tokens; under 200,000 tokens ~500 pages consider skipping RAG). Fetched directly.
+- Liu et al., Lost in the Middle, TACL 2024: https://aclanthology.org/2024.tacl-1.9/ (direct fetch blocked by the network policy; abstract confirmed via search results)
+- Chroma, Context Rot, July 2025: https://research.trychroma.com/context-rot (18 models, performance degrades with input length; confirmed via search results, direct fetch blocked)
+- Prompt caching: https://platform.claude.com/docs/en/build-with-claude/prompt-caching (5-min write 1.25x, hit 0.1x, 5-minute default lifetime)
+- MDify's own worked example: frontend/lib/siteContent.js TOKEN_EXAMPLE (667 vs 2,235 vs 3,381 tokens; 70% / 80%). Features checked in frontend/lib/formats.js and backend*/app/common/profiles.py.
+
+## Worked examples and code
+
+All worked examples are labelled as illustrations in the article and figure captions.
+Every number in them is derived from the sources above; the arithmetic lives in
+`visuals.mjs` next to this file. Python snippets in the article were run before
+publishing (Python 3.11, standard library only).
+
+## LLMiser rebrand re-verification (2026-10-20)
+
+The article was rebranded from MDify to LLMiser and every claim was re-checked. Current sources:
+
+- Claude PDF support, fetched 2026-10-20: https://platform.claude.com/docs/en/build-with-claude/pdf-support. Each page is converted into an image and its extracted text is sent alongside. Text typically 1,500-3,000 tokens per page depending on density. Amazon Bedrock Converse API (Claude Opus 4.6 and earlier): about 1,000 tokens text-only versus about 7,000 with full visual understanding for a 3-page PDF.
+- Anthropic, Introducing Contextual Retrieval (19 Sep 2024), fetched 2026-10-20: https://www.anthropic.com/news/contextual-retrieval. Top-20 retrieval failure rate -35% (5.7% to 3.7%), -49% with contextual BM25 (2.9%), -67% with reranking (1.9%). $1.02 per million document tokens with prompt caching. Under 200,000 tokens (about 500 pages) you can include the whole knowledge base.
+- Liu et al., Lost in the Middle, TACL 2024: https://aclanthology.org/2024.tacl-1.9/. Confirmed via search results 2026-10-20: performance is highest when relevant information is at the beginning or end of the context.
+- Chroma, Context Rot (14 Jul 2025), fetched 2026-10-20 at the new URL https://www.trychroma.com/research/context-rot (old research.trychroma.com URL redirects). 18 LLMs, performance grows increasingly unreliable as input length grows.
+- Claude pricing, fetched 2026-10-20: https://platform.claude.com/docs/en/about-claude/pricing. Haiku 5.5 $0.10/$0.50 (prompts up to 100k tokens; $0.50/$2.50 above), Haiku 4.5 $1/$5, Sonnet 5.5 $2/$10, Opus 5.5 $4/$20, Fable 5.1 $10/$50 per MTok. Output is 5x input on every one of them. Cache hits: 0.1x standard, 0.05x on Sonnet 5.5 and Opus 5.5, 0.025x on Fable 5.1. 5-minute write 1.25x, 1-hour write 2x. Batch 50% on input and output. Caching and batch discounts stack. Claude 4.6 and later (except Haiku 5.5) bill the full 1M context at standard rates. Tool-use system prompt 286 tokens (Opus/Sonnet/Haiku 5.5, auto) up to 804 (Opus 4.7, any/tool). The page no longer states a words-per-token figure.
+- House worked example (blog-pipeline/03-BRAND-ENTITY.md): 500-word US Letter page at 150 dpi, about 667 text tokens (0.75 words per token), 2,714 image patches, capped near 1,568 on the standard tier. 2,235 vs 667 tokens (about 70%) standard, 3,381 vs 667 (about 80%) high resolution. Replaces the old MDify siteContent TOKEN_EXAMPLE reference.
+- LLMiser app features checked 2026-10-20: frontend/lib/formats.js (20 files per batch), frontend/lib/siteContent.js, backendN/app/common/profiles.py (RAG-ready marker), token estimate = characters / 4 (frontend/components/OutputStatusBar.js).
diff --git a/blog-pipeline/Blogs/document-to-llm-pipeline/visuals.mjs b/blog-pipeline/Blogs/document-to-llm-pipeline/visuals.mjs
new file mode 100644
index 0000000..f6aaa50
--- /dev/null
+++ b/blog-pipeline/Blogs/document-to-llm-pipeline/visuals.mjs
@@ -0,0 +1,117 @@
+// Visuals for "Stop Sending Whole Documents to AI: Build a Better Pipeline" (LLMiser)
+import { B, art, banner, figure, flow, fork, funnel, hbars, note, panels } from '../../visuals/kit.mjs';
+
+const ID = 'dlp';
+
+export default {
+ banner: banner({
+ id: `${ID}-banner`,
+ kicker: 'DOCUMENT PIPELINE',
+ hook: ['Send the answer,', 'not the archive.'],
+ sub: '100 pages in -> 3 chunks out',
+ art: () => {
+ let out = '';
+ for (let i = 4; i >= 0; i -= 1) out += art.page(660 + i * 12, 70 + i * 10, 150, 200, { lines: 6, rot: -4 + i, fold: i === 0 });
+ out += ``;
+ out += art.label(930, 150, 'clean', { size: 18, anchor: 'middle' }) + art.label(930, 176, 'chunk', { size: 18, anchor: 'middle' }) + art.label(930, 202, 'rank', { size: 18, anchor: 'middle' });
+ out += art.arrow(1010, 190, 1050, 190, { sw: 3 });
+ [0, 1, 2].forEach((i) => {
+ out += art.box(1060, 120 + i * 50, 100, 38, { fill: B.amber, r: 10 }) + art.label(1110, 145 + i * 50, `#${i + 1}`, { size: 18, anchor: 'middle' });
+ });
+ out += art.arrow(1110, 272, 1110, 302, { sw: 3 });
+ out += art.box(1050, 308, 120, 42, { fill: B.lav, r: 12 }) + art.label(1110, 336, 'LLM', { size: 20, anchor: 'middle' });
+ return out;
+ },
+ }),
+
+ figures: {
+ 'naive-vs-pipeline': figure({
+ title: 'Two ways to ask about a 100-page PDF',
+ subtitle: 'Top: send everything. Bottom: prepare once, then send only what answers the question.',
+ parts: [
+ flow([
+ { t: '100-page PDF' },
+ { t: 'Send it all', sub: 'every page, every time', s: 's3' },
+ { t: 'LLM' },
+ ], { cols: 3, boxH: 62, numbered: false }),
+ flow([
+ { t: 'Extract', sub: 'text and scans' },
+ { t: 'Clean', sub: 'drop headers, footers' },
+ { t: 'Structure', sub: 'Markdown headings' },
+ { t: 'Chunk', sub: 'one section each' },
+ { t: 'Add metadata', sub: 'doc, section, page' },
+ { t: 'Index', sub: 'search once' },
+ { t: 'Retrieve', sub: 'top matches' },
+ { t: 'Assemble', sub: 'within a budget', s: 's1' },
+ { t: 'LLM', sub: 'small, focused input', s: 's1' },
+ ], { cols: 3, boxH: 72 }),
+ ],
+ }),
+
+ 'tokens-per-question': figure({
+ title: 'Input tokens for one question',
+ subtitle: 'A 100-page report of about 500 words per page, three ways.',
+ parts: [
+ hbars([
+ { label: 'Whole PDF, text plus page images', value: 223500, s: 's3' },
+ { label: 'Whole document as Markdown', value: 66700, s: 's2' },
+ { label: 'Six relevant chunks', value: 3000, s: 's1', note: 'about 1% of the PDF' },
+ ]),
+ note('Estimates: 667 tokens of text and up to about 1,568 image tokens per page (standard tier), chunks of about 500 tokens.'),
+ ],
+ }),
+
+ 'mixed-pdf': figure({
+ title: 'PDFs with text pages and scanned pages',
+ subtitle: 'Each page takes the cheapest path that still reads it, then the pieces go back in order.',
+ parts: [
+ fork({
+ start: { t: 'Mixed PDF', sub: 'reports, contracts, scans' },
+ branches: [
+ { t: 'Text page', sub: 'read the text directly', s: 's1' },
+ { t: 'Picture-only page', sub: 'text recognition', s: 's2' },
+ ],
+ join: { t: 'Merge in page order' },
+ end: { t: 'One Markdown file', s: 's1' },
+ }),
+ ],
+ }),
+
+ 'chunk-record': figure({
+ title: 'A chunk that knows where it came from',
+ subtitle: 'Metadata lets you filter before you search and cite after you answer.',
+ parts: [
+ panels([
+ {
+ title: 'chunk 14 of 212',
+ tag: '~480 tokens',
+ s: 's1',
+ lines: [
+ { t: 'doc: employee-handbook-2026.md', k: 'dim' },
+ { t: 'section: Leave > Parental leave', k: 'dim' },
+ { t: 'pages: 31-32', k: 'dim' },
+ { t: '## Parental leave', k: 'head' },
+ { t: 'Employees get 16 weeks of paid leave...' },
+ { t: '| Tenure | Paid weeks |' },
+ { t: '| < 1 year | 8 |' },
+ ],
+ },
+ ]),
+ ],
+ }),
+
+ 'context-budget': figure({
+ title: 'From search results to a context budget',
+ subtitle: 'Each step drops text the model would have had to read past.',
+ parts: [
+ funnel([
+ { label: 'Retrieved', value: 10000, display: '20 chunks, ~10,000 tokens', s: 's3' },
+ { label: 'Duplicates removed', value: 7000, display: '14 chunks, ~7,000 tokens', s: 's2' },
+ { label: 'Reranked', value: 3000, display: 'top 6, ~3,000 tokens', s: 's2' },
+ { label: 'Sent to the model', value: 2600, display: 'fits a 3,000-token budget', s: 's1' },
+ ]),
+ note('Illustrative pipeline. Tune the numbers against questions you already know the answers to.'),
+ ],
+ }),
+ },
+};
diff --git a/blog-pipeline/Blogs/hidden-token-tax-rag-pipelines/sources.md b/blog-pipeline/Blogs/hidden-token-tax-rag-pipelines/sources.md
new file mode 100644
index 0000000..830b078
--- /dev/null
+++ b/blog-pipeline/Blogs/hidden-token-tax-rag-pipelines/sources.md
@@ -0,0 +1,31 @@
+# hidden-token-tax-rag-pipelines
+
+## Keyword notes
+
+Primary and secondary keywords come from the owner's brief in `Blogs/Blog List 01.txt`.
+Search volumes were NOT measured for these terms in this session (no Keyword Planner
+access). Re-check them before investing in more articles on the same cluster.
+
+## Sources (all accessed 2026-10-03)
+- Chroma, Evaluating Chunking Strategies for Retrieval, July 2024: https://research.trychroma.com/evaluating-chunking (up to 9% recall difference; token efficiency and overlap redundancy; confirmed via search results)
+- Anthropic, Introducing Contextual Retrieval, 2024-09-19: https://www.anthropic.com/news/contextual-retrieval (-35% / -49% / -67% top-20 retrieval failure rate; $1.02 per million document tokens; under 200,000 tokens ~500 pages consider skipping RAG). Fetched directly.
+- Liu et al., Lost in the Middle, TACL 2024: https://aclanthology.org/2024.tacl-1.9/ (direct fetch blocked by the network policy; abstract confirmed via search results)
+- Chroma, Context Rot, July 2025: https://research.trychroma.com/context-rot (18 models, performance degrades with input length; confirmed via search results, direct fetch blocked)
+- MDify's own worked example: frontend/lib/siteContent.js TOKEN_EXAMPLE (667 vs 2,235 vs 3,381 tokens; 70% / 80%). Features checked in frontend/lib/formats.js and backend*/app/common/profiles.py.
+
+## Worked examples and code
+
+All worked examples are labelled as illustrations in the article and figure captions.
+Every number in them is derived from the sources above; the arithmetic lives in
+`visuals.mjs` next to this file. Python snippets in the article were run before
+publishing (Python 3.11, standard library only).
+
+## LLMiser rebrand re-verification (2026-10-20)
+
+The article was rebranded from MDify to LLMiser and every claim was re-checked. Current sources:
+
+- Chroma, Evaluating Chunking Strategies (3 Jul 2024), fetched 2026-10-20 at https://www.trychroma.com/research/evaluating-chunking. Up to 9% recall difference. Token-wise IoU counts redundant overlap tokens once.
+- Anthropic, Introducing Contextual Retrieval (19 Sep 2024), fetched 2026-10-20: https://www.anthropic.com/news/contextual-retrieval. Top-20 retrieval failure rate -35% (5.7% to 3.7%), -49% with contextual BM25 (2.9%), -67% with reranking (1.9%). $1.02 per million document tokens with prompt caching. Under 200,000 tokens (about 500 pages) you can include the whole knowledge base.
+- Liu et al., Lost in the Middle, TACL 2024: https://aclanthology.org/2024.tacl-1.9/. Confirmed via search results 2026-10-20: performance is highest when relevant information is at the beginning or end of the context.
+- Chroma, Context Rot (14 Jul 2025), fetched 2026-10-20 at the new URL https://www.trychroma.com/research/context-rot (old research.trychroma.com URL redirects). 18 LLMs, performance grows increasingly unreliable as input length grows.
+- LLMiser app features checked 2026-10-20: frontend/lib/formats.js (20 files per batch), frontend/lib/siteContent.js, backendN/app/common/profiles.py (RAG-ready marker), token estimate = characters / 4 (frontend/components/OutputStatusBar.js).
diff --git a/blog-pipeline/Blogs/hidden-token-tax-rag-pipelines/visuals.mjs b/blog-pipeline/Blogs/hidden-token-tax-rag-pipelines/visuals.mjs
new file mode 100644
index 0000000..d941f89
--- /dev/null
+++ b/blog-pipeline/Blogs/hidden-token-tax-rag-pipelines/visuals.mjs
@@ -0,0 +1,112 @@
+// Visuals for "The Hidden Token Tax in RAG Pipelines" (LLMiser)
+import { B, C, F, banner, cards, custom, figure, funnel, hbars, legend, note, rect, stacked, text } from '../../visuals/kit.mjs';
+
+const ID = 'htt';
+
+// Chunks stored (and retrieved) per unit of text with overlap o: 1 / (1 - o).
+const inflate = (o) => Math.round((1 / (1 - o)) * 100) / 100;
+
+export default {
+ banner: banner({
+ id: `${ID}-banner`,
+ kicker: 'RAG TOKENS',
+ hook: ['The hidden', 'token tax.'],
+ sub: 'most of it sits below the waterline',
+ art: () => {
+ let out = '';
+ out += ``;
+ out += ``;
+ out += ``;
+ out += ``;
+ out += `answer`;
+ out += `8,000 context tokens`;
+ return out;
+ },
+ }),
+
+ figures: {
+ 'tax-funnel': figure({
+ title: 'Where 8,000 tokens of context come from',
+ subtitle: 'One question, one untuned pipeline. The model needed about 1,500 tokens to answer.',
+ parts: [
+ funnel([
+ { label: 'Retrieve top 20', value: 8000, display: '20 chunks x 400 = 8,000 tokens', s: 's3' },
+ { label: 'Drop near-duplicates', value: 6000, display: '15 chunks, ~6,000 tokens', s: 's3' },
+ { label: 'Rerank, keep top 6', value: 2400, display: '~2,400 tokens', s: 's2' },
+ { label: 'Keep relevant passages', value: 1500, display: '~1,500 tokens needed', s: 's1' },
+ ]),
+ note('Illustrative pipeline. Each step needs its own recall test before you trust the cut.'),
+ ],
+ }),
+
+ 'overlap-inflation': figure({
+ title: 'What chunk overlap costs',
+ subtitle: 'Tokens stored and embedded per token of source text, by overlap between neighbouring chunks.',
+ parts: [
+ hbars([0, 0.1, 0.25, 0.5].map((o) => ({
+ label: `${Math.round(o * 100)}% overlap`,
+ value: inflate(o),
+ display: `${inflate(o).toFixed(2)}x`,
+ s: o === 0 ? 's1' : o >= 0.5 ? 's3' : 's2',
+ }))),
+ note('Overlap also lets two neighbouring chunks carry the same sentences into one prompt.'),
+ ],
+ }),
+
+ 'one-relevant-sentence': figure({
+ title: 'A 400-token chunk, one useful sentence',
+ subtitle: 'Large chunks match the question on one line and bring the whole page along.',
+ parts: [
+ custom(250, (y) => {
+ let s = rect(24, y, 552, 250, { fill: C.surface2, stroke: C.border3, r: 10 });
+ s += text(42, y + 28, '## Billing policy', { size: 15, font: F.mono, weight: 700, fill: C.s1 });
+ const widths = [470, 420, 500, 380, 460, 300, 490, 410, 350];
+ widths.forEach((w, i) => {
+ const yy = y + 48 + i * 21;
+ const hit = i === 4;
+ s += rect(42, yy, w, 11, { fill: hit ? C.s1 : C.s3, fo: hit ? 0.85 : 0.25, r: 4 });
+ });
+ s += text(42, y + 240, 'Paid for: ~400 tokens', { size: 14, font: F.mono, fill: C.muted });
+ s += text(558, y + 240, 'Needed: ~45 tokens', { size: 14, font: F.mono, weight: 700, anchor: 'end' });
+ return s;
+ }),
+ legend([
+ { s: 's1', name: 'Answers the question' },
+ { s: 's3', name: 'Rides along' },
+ ]),
+ ],
+ }),
+
+ 'budget': figure({
+ title: 'Give the prompt a budget',
+ subtitle: 'Input tokens per question before and after setting a fixed context budget.',
+ parts: [
+ legend([
+ { s: 's1', name: 'Question' },
+ { s: 's2', name: 'Instructions' },
+ { s: 's3', name: 'Retrieved context' },
+ ]),
+ stacked([
+ { label: 'Untuned', parts: [{ v: 50, s: 's1', name: 'question' }, { v: 600, s: 's2', name: 'instructions' }, { v: 8000, s: 's3', name: 'context' }], total: '8,650' },
+ { label: 'With a 1,500-token budget', parts: [{ v: 50, s: 's1', name: 'question' }, { v: 600, s: 's2', name: 'instructions' }, { v: 1500, s: 's3', name: 'context' }], total: '2,150', note: '-75%' },
+ ], { max: 8650 }),
+ ],
+ }),
+
+ 'eight-knobs': figure({
+ title: 'Eight knobs that set the tax',
+ parts: [
+ cards([
+ { k: '01', title: 'Chunk size', sub: 'Smaller, one-topic chunks waste less.', s: 's3' },
+ { k: '02', title: 'Overlap', sub: 'Keep it low. 50% doubles storage.', s: 's3' },
+ { k: '03', title: 'Top-K', sub: 'Retrieve wide, send narrow.', s: 's3' },
+ { k: '04', title: 'Deduplication', sub: 'Drop chunks that say the same thing.', s: 's2' },
+ { k: '05', title: 'Reranking', sub: 'Score candidates, keep the best.', s: 's2' },
+ { k: '06', title: 'Metadata filters', sub: 'Search the right documents only.', s: 's2' },
+ { k: '07', title: 'Clean Markdown', sub: 'No headers, footers or layout junk.', s: 's1' },
+ { k: '08', title: 'Token budget', sub: 'A hard cap on context per question.', s: 's1' },
+ ], { cols: 2, h: 96 }),
+ ],
+ }),
+ },
+};
diff --git a/blog-pipeline/Blogs/markdown-vs-pdf-llm-tokens/sources.md b/blog-pipeline/Blogs/markdown-vs-pdf-llm-tokens/sources.md
new file mode 100644
index 0000000..278b61e
--- /dev/null
+++ b/blog-pipeline/Blogs/markdown-vs-pdf-llm-tokens/sources.md
@@ -0,0 +1,31 @@
+# markdown-vs-pdf-llm-tokens
+
+## Keyword notes
+
+Primary and secondary keywords come from the owner's brief in `Blogs/Blog List 01.txt`.
+Search volumes were NOT measured for these terms in this session (no Keyword Planner
+access). Re-check them before investing in more articles on the same cluster.
+
+## Sources (all accessed 2026-10-03)
+- Claude pricing: https://platform.claude.com/docs/en/about-claude/pricing (list prices: Haiku 4.5 $1/$5, Sonnet 5.5 $2/$10, Opus 5.5 $4/$20, Fable 5.1 $10/$50 per MTok; output 5x input; 1 token ~ 4 chars ~ 0.75 words; newer tokenizer ~30% more tokens; tool-use system prompt 286-675 tokens; caching and batch discounts stack)
+- PDF support: https://platform.claude.com/docs/en/build-with-claude/pdf-support (each page as image + extracted text; 1,500-3,000 text tokens per page; Bedrock: ~1,000 tokens text-only vs ~7,000 full visual for a 3-page PDF)
+- Vision: https://platform.claude.com/docs/en/build-with-claude/vision (ceil(w/28) x ceil(h/28) visual tokens; caps 1,568 standard / 4,784 high-res)
+- MDify's own worked example: frontend/lib/siteContent.js TOKEN_EXAMPLE (667 vs 2,235 vs 3,381 tokens; 70% / 80%). Features checked in frontend/lib/formats.js and backend*/app/common/profiles.py.
+
+## Worked examples and code
+
+All worked examples are labelled as illustrations in the article and figure captions.
+Every number in them is derived from the sources above; the arithmetic lives in
+`visuals.mjs` next to this file. Python snippets in the article were run before
+publishing (Python 3.11, standard library only).
+
+## LLMiser rebrand re-verification (2026-10-20)
+
+The article was rebranded from MDify to LLMiser and every claim was re-checked. Current sources:
+
+- Claude PDF support, fetched 2026-10-20: https://platform.claude.com/docs/en/build-with-claude/pdf-support. Each page is converted into an image and its extracted text is sent alongside. Text typically 1,500-3,000 tokens per page depending on density. Amazon Bedrock Converse API (Claude Opus 4.6 and earlier): about 1,000 tokens text-only versus about 7,000 with full visual understanding for a 3-page PDF.
+- Claude vision, fetched 2026-10-20: https://platform.claude.com/docs/en/build-with-claude/vision. ceil(w/28) x ceil(h/28) visual tokens. Standard tier (all models before Claude 4.7): 1,568 px long edge and 1,568 tokens max. High-resolution tier (Claude 4.7 and later): 2,576 px and 4,784 tokens.
+- OpenAI, What are tokens and how to count them (help article, confirmed via search results 2026-10-20, direct fetch returns 403): https://help.openai.com/en/articles/4936856-what-are-tokens-and-how-to-count-them. 1 token is about 4 characters or 0.75 English words.
+- Claude glossary, fetched 2026-10-20: https://platform.claude.com/docs/en/about-claude/glossary. Claude 4.7 and later use a tokenizer that produces about 30% more tokens for the same text than earlier models, on which a token is about 3.5 English characters.
+- House worked example (blog-pipeline/03-BRAND-ENTITY.md): 500-word US Letter page at 150 dpi, about 667 text tokens (0.75 words per token), 2,714 image patches, capped near 1,568 on the standard tier. 2,235 vs 667 tokens (about 70%) standard, 3,381 vs 667 (about 80%) high resolution. Replaces the old MDify siteContent TOKEN_EXAMPLE reference.
+- LLMiser app features checked 2026-10-20: frontend/lib/formats.js (20 files per batch), frontend/lib/siteContent.js, backendN/app/common/profiles.py (RAG-ready marker), token estimate = characters / 4 (frontend/components/OutputStatusBar.js).
diff --git a/blog-pipeline/Blogs/markdown-vs-pdf-llm-tokens/visuals.mjs b/blog-pipeline/Blogs/markdown-vs-pdf-llm-tokens/visuals.mjs
new file mode 100644
index 0000000..56139dd
--- /dev/null
+++ b/blog-pipeline/Blogs/markdown-vs-pdf-llm-tokens/visuals.mjs
@@ -0,0 +1,177 @@
+// Visuals for "Markdown vs Raw PDFs: Which Uses Fewer LLM Tokens?" (LLMiser)
+import { B, C, F, art, banner, custom, decision, figure, legend, line, note, panels, rect, stacked, text } from '../../visuals/kit.mjs';
+
+const ID = 'mvp';
+
+export default {
+ banner: banner({
+ id: `${ID}-banner`,
+ kicker: 'PDF VS MARKDOWN',
+ hook: ['Same page,', 'fewer tokens.'],
+ sub: 'worked example: 2,235 → 667 tokens',
+ art: () => {
+ let out = art.page(650, 70, 190, 250, { rot: -6, lines: 9, lineColor: '#d9b8cf', widths: [0.9, 0.4, 0.85, 0.3, 0.7, 0.95, 0.5, 0.8, 0.35] });
+ out += art.box(668, 270, 120, 34, { fill: B.pink, stroke: B.ink, r: 17, sw: 2 }) + art.label(728, 294, '2,235', { anchor: 'middle', fill: '#ffffff', size: 21 });
+ out += art.arrow(870, 200, 950, 200);
+ out += art.page(975, 80, 175, 230, { rot: 4, lines: 6, lineColor: B.lav, widths: [0.55, 0.9, 0.8, 0.85, 0.5, 0.75] });
+ out += `##`;
+ out += art.box(1010, 270, 110, 34, { fill: B.amber, stroke: B.ink, r: 17, sw: 2 }) + art.label(1065, 294, '667', { anchor: 'middle', size: 21 });
+ return out;
+ },
+ }),
+
+ figures: {
+ 'tokens-per-page': figure({
+ title: 'One 500-word page, three ways',
+ subtitle: 'Worked example: input tokens when an AI app reads the page. PDF readers often send the extracted text plus an image of every page.',
+ parts: [
+ legend([
+ { s: 's1', name: 'Page text' },
+ { s: 's2', name: 'Page image' },
+ ]),
+ stacked([
+ { label: 'Markdown', parts: [{ v: 667, s: 's1', name: 'text' }], total: '667' },
+ { label: 'PDF, standard-tier image', parts: [{ v: 667, s: 's1', name: 'text' }, { v: 1568, s: 's2', name: 'image' }], total: '2,235 (-70%)' },
+ { label: 'PDF, high-res tier (Claude 4.7+)', parts: [{ v: 667, s: 's1', name: 'text' }, { v: 2714, s: 's2', name: 'image' }], total: '3,381 (-80%)' },
+ ], { max: 3381 }),
+ note('Text: about 0.75 words per token (rule of thumb). Image: one token per 28 x 28 px patch of a 1275 x 1650 px page, capped near 1,568 on the standard tier. Checked 20 October 2026.'),
+ ],
+ }),
+
+ 'extraction-noise': figure({
+ title: 'What the model actually reads',
+ subtitle: 'The same page, as plain extracted text and as Markdown. Struck lines are tokens you pay for and the model has to ignore.',
+ parts: [
+ panels([
+ {
+ title: 'Raw PDF text',
+ tag: 'noisy',
+ s: 's3',
+ lines: [
+ { t: 'ACME Corp | Annual Report 2025 Page 14', k: 'noise' },
+ { t: 'Revenue grew 18% in the fiscal year, dri-', k: 'keep' },
+ { t: 'Operating costs fell 4% after the plat-', k: 'keep' },
+ { t: 'ven by two new regions. form migration.', k: 'dim' },
+ { t: 'Region Q1 Q2 Q3 Q4 North 4.1 4.4 4.9', k: 'dim' },
+ { t: 'Confidential. Do not distribute. 14', k: 'noise' },
+ ],
+ },
+ {
+ title: 'Markdown',
+ tag: 'clean',
+ s: 's1',
+ lines: [
+ { t: '## Results', k: 'head' },
+ { t: 'Revenue grew 18%, driven by two new regions.' },
+ { t: 'Operating costs fell 4% after the platform migration.' },
+ { t: '| Region | Q1 | Q2 | Q3 |' },
+ { t: '| North | 4.1 | 4.4 | 4.9 |' },
+ ],
+ },
+ ]),
+ ],
+ }),
+
+ 'reading-order': figure({
+ title: 'Two columns, one wrong order',
+ subtitle: 'Text extraction reads across the page by line position. In a two-column layout that interleaves the columns.',
+ parts: [
+ custom(250, (y) => {
+ let svg = '';
+ const page = (x, label, order) => {
+ let s = rect(x, y, 250, 210, { fill: C.surface2, stroke: C.border3, r: 10 });
+ s += text(x + 125, y + 236, label, { size: 15, weight: 700, anchor: 'middle' });
+ const cols = [x + 18, x + 132];
+ for (let c = 0; c < 2; c += 1) {
+ for (let r = 0; r < 3; r += 1) {
+ const bx = cols[c];
+ const by = y + 22 + r * 60;
+ const tag = c === 0 ? `A${r + 1}` : `B${r + 1}`;
+ s += rect(bx, by, 100, 46, { fill: c === 0 ? C.s1 : C.s2, fo: 0.14, stroke: c === 0 ? C.s1 : C.s2, sw: 1.5, r: 6 });
+ s += text(bx + 50, by + 29, tag, { size: 16, font: F.mono, weight: 700, anchor: 'middle' });
+ }
+ }
+ order.forEach(([a, b], i) => {
+ s += line(a[0], a[1], b[0], b[1], { stroke: C.ink, sw: 1.6, dash: i % 2 ? '4 4' : undefined, op: 0.7 });
+ });
+ return s;
+ };
+ const L = 24;
+ const R = 326;
+ const cxA = (x) => x + 18 + 50;
+ const cxB = (x) => x + 132 + 50;
+ const ry = (r) => y + 22 + r * 60 + 23;
+ svg += page(L, 'Extracted: A1 B1 A2 B2 A3 B3', [
+ [[cxA(L) + 50, ry(0)], [cxB(L) - 50, ry(0)]],
+ [[cxB(L) - 50, ry(0) + 10], [cxA(L) + 50, ry(1) - 10]],
+ [[cxA(L) + 50, ry(1)], [cxB(L) - 50, ry(1)]],
+ [[cxB(L) - 50, ry(1) + 10], [cxA(L) + 50, ry(2) - 10]],
+ [[cxA(L) + 50, ry(2)], [cxB(L) - 50, ry(2)]],
+ ]);
+ svg += page(R, 'Markdown: A1 A2 A3 B1 B2 B3', [
+ [[cxA(R), ry(0) + 23], [cxA(R), ry(1) - 23]],
+ [[cxA(R), ry(1) + 23], [cxA(R), ry(2) - 23]],
+ [[cxA(R) + 50, ry(2) - 10], [cxB(R) - 50, ry(0) + 10]],
+ [[cxB(R), ry(0) + 23], [cxB(R), ry(1) - 23]],
+ [[cxB(R), ry(1) + 23], [cxB(R), ry(2) - 23]],
+ ]);
+ return svg;
+ }),
+ ],
+ }),
+
+ 'chunk-boundaries': figure({
+ title: 'Headings make better chunk edges',
+ subtitle: 'Fixed-size chunks cut through sections. Markdown headings give a splitter natural places to cut.',
+ parts: [
+ custom(252, (y) => {
+ let svg = '';
+ const sections = [
+ { h: '## Pricing', n: 3 },
+ { h: '## Refunds', n: 2 },
+ { h: '## Support', n: 3 },
+ ];
+ const doc = (x, label, cuts, sColor) => {
+ let s = text(x, y + 14, label, { size: 15, weight: 700 });
+ let yy = y + 28;
+ const ys = [];
+ sections.forEach((sec) => {
+ ys.push(yy);
+ s += text(x + 10, yy + 16, sec.h, { size: 14, font: F.mono, weight: 700, fill: C.s1 });
+ yy += 24;
+ for (let i = 0; i < sec.n; i += 1) {
+ s += rect(x + 10, yy + 4, 200 - (i % 2) * 50, 7, { fill: C.border3, r: 3.5 });
+ yy += 16;
+ }
+ yy += 6;
+ });
+ s += rect(x, y + 24, 250, yy - y - 20, { stroke: C.border3, r: 8 });
+ const marks = cuts === 'heading' ? ys.slice(1).map((v) => v - 3) : [y + 70, y + 148, y + 216];
+ marks.forEach((my) => {
+ s += line(x - 6, my, x + 256, my, { stroke: sColor, sw: 2.5, dash: '7 5' });
+ });
+ return s;
+ };
+ svg += doc(24, 'Every 120 tokens', 'fixed', C.s3);
+ svg += doc(326, 'At each ## heading', 'heading', C.s1);
+ return svg;
+ }),
+ note('LLMiser\'s RAG-ready profile adds a marker before every ## heading for exactly this.', { s: 's1' }),
+ ],
+ }),
+
+ 'when-to-send-pdf': figure({
+ title: 'Markdown or the PDF itself?',
+ subtitle: 'Convert by default. Send the page when the answer lives in a picture.',
+ parts: [
+ decision({
+ start: { t: 'Your document', sub: 'PDF, slides, scan' },
+ question: 'Is the answer in a chart, photo or layout?',
+ yes: { t: 'Send that page', sub: 'image tokens are worth it here', s: 's2' },
+ no: { t: 'Convert to Markdown', sub: 'headings, lists, tables', s: 's1' },
+ after: { t: 'Paste only what you need', sub: 'fewer tokens per question', s: 's1' },
+ }),
+ ],
+ }),
+ },
+};
diff --git a/blog-pipeline/Blogs/rag-cost-optimization/sources.md b/blog-pipeline/Blogs/rag-cost-optimization/sources.md
new file mode 100644
index 0000000..f2b4d0f
--- /dev/null
+++ b/blog-pipeline/Blogs/rag-cost-optimization/sources.md
@@ -0,0 +1,31 @@
+# rag-cost-optimization
+
+## Keyword notes
+
+Primary and secondary keywords come from the owner's brief in `Blogs/Blog List 01.txt`.
+Search volumes were NOT measured for these terms in this session (no Keyword Planner
+access). Re-check them before investing in more articles on the same cluster.
+
+## Sources (all accessed 2026-10-03)
+- Claude pricing: https://platform.claude.com/docs/en/about-claude/pricing (list prices: Haiku 4.5 $1/$5, Sonnet 5.5 $2/$10, Opus 5.5 $4/$20, Fable 5.1 $10/$50 per MTok; output 5x input; 1 token ~ 4 chars ~ 0.75 words; newer tokenizer ~30% more tokens; tool-use system prompt 286-675 tokens; caching and batch discounts stack)
+- Anthropic, Introducing Contextual Retrieval, 2024-09-19: https://www.anthropic.com/news/contextual-retrieval (-35% / -49% / -67% top-20 retrieval failure rate; $1.02 per million document tokens; under 200,000 tokens ~500 pages consider skipping RAG). Fetched directly.
+- Liu et al., Lost in the Middle, TACL 2024: https://aclanthology.org/2024.tacl-1.9/ (direct fetch blocked by the network policy; abstract confirmed via search results)
+- Prompt caching: https://platform.claude.com/docs/en/build-with-claude/prompt-caching (5-min write 1.25x, hit 0.1x, 5-minute default lifetime)
+- MDify's own worked example: frontend/lib/siteContent.js TOKEN_EXAMPLE (667 vs 2,235 vs 3,381 tokens; 70% / 80%). Features checked in frontend/lib/formats.js and backend*/app/common/profiles.py.
+
+## Worked examples and code
+
+All worked examples are labelled as illustrations in the article and figure captions.
+Every number in them is derived from the sources above; the arithmetic lives in
+`visuals.mjs` next to this file. Python snippets in the article were run before
+publishing (Python 3.11, standard library only).
+
+## LLMiser rebrand re-verification (2026-10-20)
+
+The article was rebranded from MDify to LLMiser and every claim was re-checked. Current sources:
+
+- Claude pricing, fetched 2026-10-20: https://platform.claude.com/docs/en/about-claude/pricing. Haiku 5.5 $0.10/$0.50 (prompts up to 100k tokens; $0.50/$2.50 above), Haiku 4.5 $1/$5, Sonnet 5.5 $2/$10, Opus 5.5 $4/$20, Fable 5.1 $10/$50 per MTok. Output is 5x input on every one of them. Cache hits: 0.1x standard, 0.05x on Sonnet 5.5 and Opus 5.5, 0.025x on Fable 5.1. 5-minute write 1.25x, 1-hour write 2x. Batch 50% on input and output. Caching and batch discounts stack. Claude 4.6 and later (except Haiku 5.5) bill the full 1M context at standard rates. Tool-use system prompt 286 tokens (Opus/Sonnet/Haiku 5.5, auto) up to 804 (Opus 4.7, any/tool). The page no longer states a words-per-token figure.
+- Anthropic, Introducing Contextual Retrieval (19 Sep 2024), fetched 2026-10-20: https://www.anthropic.com/news/contextual-retrieval. Top-20 retrieval failure rate -35% (5.7% to 3.7%), -49% with contextual BM25 (2.9%), -67% with reranking (1.9%). $1.02 per million document tokens with prompt caching. Under 200,000 tokens (about 500 pages) you can include the whole knowledge base.
+- Liu et al., Lost in the Middle, TACL 2024: https://aclanthology.org/2024.tacl-1.9/. Confirmed via search results 2026-10-20: performance is highest when relevant information is at the beginning or end of the context.
+- House worked example (blog-pipeline/03-BRAND-ENTITY.md): 500-word US Letter page at 150 dpi, about 667 text tokens (0.75 words per token), 2,714 image patches, capped near 1,568 on the standard tier. 2,235 vs 667 tokens (about 70%) standard, 3,381 vs 667 (about 80%) high resolution. Replaces the old MDify siteContent TOKEN_EXAMPLE reference.
+- LLMiser app features checked 2026-10-20: frontend/lib/formats.js (20 files per batch), frontend/lib/siteContent.js, backendN/app/common/profiles.py (RAG-ready marker), token estimate = characters / 4 (frontend/components/OutputStatusBar.js).
diff --git a/blog-pipeline/Blogs/rag-cost-optimization/visuals.mjs b/blog-pipeline/Blogs/rag-cost-optimization/visuals.mjs
new file mode 100644
index 0000000..40326b4
--- /dev/null
+++ b/blog-pipeline/Blogs/rag-cost-optimization/visuals.mjs
@@ -0,0 +1,109 @@
+// Visuals for "The Real Cost of RAG: Embeddings, Tokens and Re-Ranking" (LLMiser)
+import { B, art, banner, cards, figure, flow, hbars, legend, note, tiles } from '../../visuals/kit.mjs';
+
+const ID = 'rcr';
+
+export default {
+ banner: banner({
+ id: `${ID}-banner`,
+ kicker: 'RAG COST',
+ hook: ['Embeddings are', 'the cheap part.'],
+ sub: 'the bill grows at question time',
+ art: () => {
+ let out = '';
+ const steps = [
+ [660, 110, 'parse', B.lav, '$'],
+ [800, 110, 'embed', B.lav, '$'],
+ [940, 110, 'store', B.lav, '$'],
+ [660, 250, 'retrieve', B.pink, '$$'],
+ [800, 250, 'rerank', B.pink, '$$'],
+ [940, 250, 'generate', B.pink, '$$$$'],
+ ];
+ steps.forEach(([x, y, t, c, cost], i) => {
+ out += art.box(x, y, 118, 64, { fill: B.paper, r: 12 });
+ out += art.label(x + 59, y + 38, t, { size: 18, anchor: 'middle' });
+ out += art.box(x + 66, y - 18, 64, 30, { fill: c, r: 15, sw: 2 }) + art.label(x + 98, y + 3, cost, { size: 16, anchor: 'middle' });
+ if (i % 3 !== 2) out += art.arrow(x + 122, y + 32, x + 136, y + 32, { sw: 2.5, head: 10 });
+ });
+ out += art.label(1072, 152, 'once', { size: 20, weight: 700 });
+ out += art.label(1072, 292, 'every', { size: 20, weight: 700 }) + art.label(1072, 316, 'question', { size: 20, weight: 700 });
+ return out;
+ },
+ }),
+
+ figures: {
+ 'rag-cost-map': figure({
+ title: 'Where a RAG system spends',
+ subtitle: 'The top row runs once per document. The bottom rows run for every question.',
+ parts: [
+ legend([
+ { s: 's2', name: 'Once per document' },
+ { s: 's3', name: 'Every question' },
+ ]),
+ flow([
+ { t: 'Parse', sub: 'PDF to text', s: 's2' },
+ { t: 'Chunk', sub: 'split by section', s: 's2' },
+ { t: 'Embed and store', sub: 'vectors + metadata', s: 's2' },
+ { t: 'Retrieve', sub: 'top-K search', s: 's3' },
+ { t: 'Rerank', sub: 'score candidates', s: 's3' },
+ { t: 'Build context', sub: 'pick what fits', s: 's3' },
+ { t: 'Input tokens', sub: 'context + prompt', s: 's3' },
+ { t: 'Output tokens', sub: 'the answer', s: 's3' },
+ ], { cols: 3, boxH: 74 }),
+ ],
+ }),
+
+ 'once-vs-monthly': figure({
+ title: 'One-time tokens vs monthly tokens',
+ subtitle: 'A 2,000-page corpus answering 10,000 questions a month with 8,000 tokens of context each.',
+ parts: [
+ hbars([
+ { label: 'Embed the whole corpus, once', value: 1.33, display: '1.33M tokens', s: 's2' },
+ { label: 'Context sent to the model, per month', value: 80, display: '80M tokens', s: 's3', note: '60x' },
+ ]),
+ note('About 667 tokens per page as Markdown (rule of thumb). 80M input tokens at Sonnet 5.5\'s $2 per million is $160 a month, before output.'),
+ ],
+ }),
+
+ 'context-per-question': figure({
+ title: 'Context per question',
+ subtitle: 'Fewer, smaller, cleaner chunks change the per-question bill the most.',
+ parts: [
+ hbars([
+ { label: 'Top 20 chunks of 400 tokens', value: 8000, s: 's3' },
+ { label: 'Reranked to the top 5', value: 2000, s: 's2', note: '-75%' },
+ { label: 'Top 5 of 300-token clean chunks', value: 1500, s: 's1', note: '-81%' },
+ ]),
+ note('Illustrative sizes. Whether 5 chunks are enough depends on your questions: test recall before you cut.'),
+ ],
+ }),
+
+ 'contextual-retrieval': figure({
+ title: 'Better retrieval, fewer failures',
+ subtitle: 'Drop in top-20 retrieval failure rate in Anthropic\'s Contextual Retrieval tests (2024).',
+ parts: [
+ tiles([
+ { big: '-35%', label: 'contextual embeddings', s: 's2' },
+ { big: '-49%', label: '+ contextual keyword search', s: 's2' },
+ { big: '-67%', label: '+ reranking', s: 's1' },
+ ]),
+ note('One-time cost to add context to each chunk: $1.02 per million document tokens, with prompt caching.'),
+ ],
+ }),
+
+ 'where-to-optimize': figure({
+ title: 'Where optimization pays',
+ subtitle: 'Ranked by how often the cost repeats.',
+ parts: [
+ cards([
+ { k: '01', title: 'Context size', sub: 'Billed on every question. Set a hard token budget.', s: 's3' },
+ { k: '02', title: 'Top-K', sub: 'Retrieve wide, send narrow.', s: 's3' },
+ { k: '03', title: 'Reranking', sub: 'Costs a call, saves context tokens.', s: 's2' },
+ { k: '04', title: 'Parse quality', sub: 'Clean Markdown means fewer junk chunks.', s: 's2' },
+ { k: '05', title: 'Caching', sub: 'Cache the stable prompt prefix.', s: 's1' },
+ { k: '06', title: 'Skip RAG', sub: 'Under ~200,000 tokens, send it all.', s: 's1' },
+ ], { cols: 2, h: 100 }),
+ ],
+ }),
+ },
+};
diff --git a/blog-pipeline/Blogs/reduce-llm-api-costs/sources.md b/blog-pipeline/Blogs/reduce-llm-api-costs/sources.md
new file mode 100644
index 0000000..f058a5f
--- /dev/null
+++ b/blog-pipeline/Blogs/reduce-llm-api-costs/sources.md
@@ -0,0 +1,35 @@
+# reduce-llm-api-costs
+
+## Keyword notes
+
+Primary and secondary keywords come from the owner's brief in `Blogs/Blog List 01.txt`.
+Search volumes were NOT measured for these terms in this session (no Keyword Planner
+access). Re-check them before investing in more articles on the same cluster.
+
+## Sources (all accessed 2026-10-03)
+- Claude pricing: https://platform.claude.com/docs/en/about-claude/pricing (list prices: Haiku 4.5 $1/$5, Sonnet 5.5 $2/$10, Opus 5.5 $4/$20, Fable 5.1 $10/$50 per MTok; output 5x input; 1 token ~ 4 chars ~ 0.75 words; newer tokenizer ~30% more tokens; tool-use system prompt 286-675 tokens; caching and batch discounts stack)
+- Prompt caching: https://platform.claude.com/docs/en/build-with-claude/prompt-caching (5-min write 1.25x, hit 0.1x, 5-minute default lifetime)
+- Batch processing: https://platform.claude.com/docs/en/build-with-claude/batch-processing (50% cost reduction, most batches finish in under 1 hour)
+- Vision: https://platform.claude.com/docs/en/build-with-claude/vision (ceil(w/28) x ceil(h/28) visual tokens; caps 1,568 standard / 4,784 high-res)
+- Ong et al., RouteLLM, 2024 (ICLR 2025): https://arxiv.org/abs/2406.18665 (cost reduced by over 2x without sacrificing response quality; confirmed via search results, arXiv blocked)
+- Pan et al., LLMLingua-2, Findings of ACL 2024: https://aclanthology.org/2024.findings-acl.57/ (2x-5x compression, 1.6x-2.9x end-to-end latency; confirmed via search results)
+- MDify's own worked example: frontend/lib/siteContent.js TOKEN_EXAMPLE (667 vs 2,235 vs 3,381 tokens; 70% / 80%). Features checked in frontend/lib/formats.js and backend*/app/common/profiles.py.
+
+## Worked examples and code
+
+All worked examples are labelled as illustrations in the article and figure captions.
+Every number in them is derived from the sources above; the arithmetic lives in
+`visuals.mjs` next to this file. Python snippets in the article were run before
+publishing (Python 3.11, standard library only).
+
+## LLMiser rebrand re-verification (2026-10-20)
+
+The article was rebranded from MDify to LLMiser and every claim was re-checked. Current sources:
+
+- Claude pricing, fetched 2026-10-20: https://platform.claude.com/docs/en/about-claude/pricing. Haiku 5.5 $0.10/$0.50 (prompts up to 100k tokens; $0.50/$2.50 above), Haiku 4.5 $1/$5, Sonnet 5.5 $2/$10, Opus 5.5 $4/$20, Fable 5.1 $10/$50 per MTok. Output is 5x input on every one of them. Cache hits: 0.1x standard, 0.05x on Sonnet 5.5 and Opus 5.5, 0.025x on Fable 5.1. 5-minute write 1.25x, 1-hour write 2x. Batch 50% on input and output. Caching and batch discounts stack. Claude 4.6 and later (except Haiku 5.5) bill the full 1M context at standard rates. Tool-use system prompt 286 tokens (Opus/Sonnet/Haiku 5.5, auto) up to 804 (Opus 4.7, any/tool). The page no longer states a words-per-token figure.
+- Batch processing, fetched 2026-10-20: https://platform.claude.com/docs/en/build-with-claude/batch-processing. 50% cost reduction, most batches finish in less than 1 hour.
+- Claude vision, fetched 2026-10-20: https://platform.claude.com/docs/en/build-with-claude/vision. ceil(w/28) x ceil(h/28) visual tokens. Standard tier (all models before Claude 4.7): 1,568 px long edge and 1,568 tokens max. High-resolution tier (Claude 4.7 and later): 2,576 px and 4,784 tokens.
+- House worked example (blog-pipeline/03-BRAND-ENTITY.md): 500-word US Letter page at 150 dpi, about 667 text tokens (0.75 words per token), 2,714 image patches, capped near 1,568 on the standard tier. 2,235 vs 667 tokens (about 70%) standard, 3,381 vs 667 (about 80%) high resolution. Replaces the old MDify siteContent TOKEN_EXAMPLE reference.
+- Ong et al., RouteLLM, ICLR 2025: https://arxiv.org/abs/2406.18665. Confirmed via search results 2026-10-20: cost reduced by over 2x without sacrificing response quality on public benchmarks.
+- Pan et al., LLMLingua-2, Findings of ACL 2024: https://aclanthology.org/2024.findings-acl.57/. Confirmed via search results 2026-10-20: 2x-5x compression, 1.6x-2.9x end-to-end latency.
+- LLMiser app features checked 2026-10-20: frontend/lib/formats.js (20 files per batch), frontend/lib/siteContent.js, backendN/app/common/profiles.py (RAG-ready marker), token estimate = characters / 4 (frontend/components/OutputStatusBar.js).
diff --git a/blog-pipeline/Blogs/reduce-llm-api-costs/visuals.mjs b/blog-pipeline/Blogs/reduce-llm-api-costs/visuals.mjs
new file mode 100644
index 0000000..f691ccf
--- /dev/null
+++ b/blog-pipeline/Blogs/reduce-llm-api-costs/visuals.mjs
@@ -0,0 +1,124 @@
+// Visuals for "How to Reduce LLM API Costs Without Losing Quality" (LLMiser)
+import { B, art, banner, cards, figure, flow, hbars, legend, note } from '../../visuals/kit.mjs';
+
+const ID = 'rac';
+
+// Worked example on Claude Sonnet 5.5 list prices ($2 input, $10 output per
+// million tokens, cache hits at 0.05x, platform.claude.com pricing page,
+// checked 20 October 2026).
+// Baseline: 3,000-token system prompt + 10 PDF pages (2,235 each) + 50-token
+// question, 800 output tokens.
+const IN = 2 / 1e6;
+const OUT = 10 / 1e6;
+const cents = (input, output) => Math.round((input * IN + output * OUT) * 10000) / 100;
+const baseline = cents(3000 + 22350 + 50, 800); // 5.88
+const markdown = cents(3000 + 6670 + 50, 800); // 2.74
+const cached = cents(150 + 6670 + 50, 800); // 2.17
+const capped = cents(150 + 6670 + 50, 500); // 1.87
+const batched = Math.round(capped * 50) / 100; // 0.94
+
+export default {
+ banner: banner({
+ id: `${ID}-banner`,
+ kicker: 'LLM API COSTS',
+ hook: ['Smaller bill.', 'Same answers.'],
+ sub: 'cut waste, not quality',
+ art: () => {
+ let out = '';
+ // Receipt with a zigzag bottom.
+ let zig = 'M740 70 H1000 V300';
+ for (let x = 1000; x > 740; x -= 20) zig += ` L${x - 10} 316 L${x - 20} 300`;
+ zig += ' Z';
+ out += ``;
+ out += art.label(870, 108, 'API INVOICE', { size: 20, anchor: 'middle' });
+ const rows = [['input', '$$$$'], ['output', '$$$$$'], ['retries', '$$'], ['tools', '$$']];
+ rows.forEach(([k, v], i) => {
+ out += art.label(764, 150 + i * 34, k, { size: 18, weight: 400 }) + art.label(976, 150 + i * 34, v, { size: 18, anchor: 'end' });
+ out += ``;
+ // Waste rows (retries, tools) struck through.
+ if (i >= 2) out += ``;
+ });
+ // Stamp.
+ out += ``;
+ out += `trimmed`;
+ return out;
+ },
+ }),
+
+ figures: {
+ 'output-price': figure({
+ title: 'Output tokens cost 5x input',
+ subtitle: 'List prices per million tokens, checked 20 October 2026. Haiku 5.5 prices apply to prompts up to 100,000 tokens.',
+ parts: [
+ legend([
+ { s: 's2', name: 'Input' },
+ { s: 's3', name: 'Output' },
+ ]),
+ hbars([
+ { label: 'Haiku 5.5 input', value: 0.1, display: '$0.10', s: 's2' },
+ { label: 'Haiku 5.5 output', value: 0.5, display: '$0.50', s: 's3' },
+ { label: 'Sonnet 5.5 input', value: 2, display: '$2', s: 's2' },
+ { label: 'Sonnet 5.5 output', value: 10, display: '$10', s: 's3' },
+ { label: 'Opus 5.5 input', value: 4, display: '$4', s: 's2' },
+ { label: 'Opus 5.5 output', value: 20, display: '$20', s: 's3' },
+ ]),
+ ],
+ }),
+
+ 'cache-math': figure({
+ title: 'A 10,000-token prompt, sent 10 times',
+ subtitle: 'Billed input in token-equivalents. One cache write at 1.25x, then nine cache hits.',
+ parts: [
+ hbars([
+ { label: 'No caching', value: 100000, s: 's3' },
+ { label: 'Hits at 0.1x (most models)', value: 21500, s: 's1', note: '78% less' },
+ { label: 'Hits at 0.05x (Sonnet/Opus 5.5)', value: 17000, s: 's1', note: '83% less' },
+ ]),
+ note('12,500 for the first write plus 9 hits. The 5-minute cache refreshes on each hit. Rates checked 20 October 2026.'),
+ ],
+ }),
+
+ 'seven-levers': figure({
+ title: 'Where the savings come from',
+ subtitle: 'Each figure comes from the source named in the article. Your savings depend on your workload.',
+ parts: [
+ cards([
+ { k: '-50%', title: 'Batch what can wait', sub: 'Batch API halves input and output prices.', s: 's1' },
+ { k: '≤0.1x', title: 'Cache what repeats', sub: 'A cache hit costs 10% or less of normal input.', s: 's1' },
+ { k: '-70%', title: 'Shrink documents', sub: 'One PDF page as Markdown, in our worked example.', s: 's1' },
+ { k: '>2x', title: 'Route easy requests', sub: 'Cheaper model when it is good enough.', s: 's2' },
+ { k: '5x', title: 'Cap the output', sub: 'Output tokens cost five times input.', s: 's3' },
+ { k: '2-5x', title: 'Compress prompts', sub: 'Learned compression on long inputs.', s: 's2' },
+ ], { cols: 2, h: 104 }),
+ ],
+ }),
+
+ 'worked-example': figure({
+ title: 'One request, five changes',
+ subtitle: 'Cost of one document Q&A request on Sonnet 5.5, applying each change on top of the last.',
+ parts: [
+ hbars([
+ { label: 'Baseline: PDF pages, full prompt', value: baseline, display: `${baseline.toFixed(2)}¢`, s: 's3' },
+ { label: '+ PDF converted to Markdown', value: markdown, display: `${markdown.toFixed(2)}¢`, s: 's1' },
+ { label: '+ system prompt cached', value: cached, display: `${cached.toFixed(2)}¢`, s: 's1' },
+ { label: '+ output capped at 500 tokens', value: capped, display: `${capped.toFixed(2)}¢`, s: 's1', note: '-68%' },
+ { label: '+ Batch API (async only)', value: batched, display: `${batched.toFixed(2)}¢`, s: 's1', note: '-84%' },
+ ]),
+ note('Illustration, not a benchmark: 3,000-token system prompt, 10 PDF pages, 50-token question, 800 output tokens. Cache hits at 0.05x, write left out.'),
+ ],
+ }),
+
+ 'safe-loop': figure({
+ title: 'Cut cost without cutting quality',
+ parts: [
+ flow([
+ { t: 'Build a test set', sub: '30 to 50 real questions' },
+ { t: 'Record a baseline', sub: 'cost and answer quality' },
+ { t: 'Change one lever', s: 's1' },
+ { t: 'Re-run the test set', sub: 'same questions, same checks' },
+ { t: 'Keep or roll back', sub: 'quality first, then cost' },
+ ], { cols: 3, boxH: 96 }),
+ ],
+ }),
+ },
+};
diff --git a/blog-pipeline/Blogs/reduce-llm-token-usage/sources.md b/blog-pipeline/Blogs/reduce-llm-token-usage/sources.md
new file mode 100644
index 0000000..51926bb
--- /dev/null
+++ b/blog-pipeline/Blogs/reduce-llm-token-usage/sources.md
@@ -0,0 +1,34 @@
+# reduce-llm-token-usage
+
+## Keyword notes
+
+Primary and secondary keywords come from the owner's brief in `Blogs/Blog List 01.txt`.
+Search volumes were NOT measured for these terms in this session (no Keyword Planner
+access). Re-check them before investing in more articles on the same cluster.
+
+## Sources (all accessed 2026-10-03)
+- Claude pricing: https://platform.claude.com/docs/en/about-claude/pricing (list prices: Haiku 4.5 $1/$5, Sonnet 5.5 $2/$10, Opus 5.5 $4/$20, Fable 5.1 $10/$50 per MTok; output 5x input; 1 token ~ 4 chars ~ 0.75 words; newer tokenizer ~30% more tokens; tool-use system prompt 286-675 tokens; caching and batch discounts stack)
+- PDF support: https://platform.claude.com/docs/en/build-with-claude/pdf-support (each page as image + extracted text; 1,500-3,000 text tokens per page; Bedrock: ~1,000 tokens text-only vs ~7,000 full visual for a 3-page PDF)
+- Prompt caching: https://platform.claude.com/docs/en/build-with-claude/prompt-caching (5-min write 1.25x, hit 0.1x, 5-minute default lifetime)
+- Chroma, Context Rot, July 2025: https://research.trychroma.com/context-rot (18 models, performance degrades with input length; confirmed via search results, direct fetch blocked)
+- Chroma, Evaluating Chunking Strategies for Retrieval, July 2024: https://research.trychroma.com/evaluating-chunking (up to 9% recall difference; token efficiency and overlap redundancy; confirmed via search results)
+- MDify's own worked example: frontend/lib/siteContent.js TOKEN_EXAMPLE (667 vs 2,235 vs 3,381 tokens; 70% / 80%). Features checked in frontend/lib/formats.js and backend*/app/common/profiles.py.
+
+## Worked examples and code
+
+All worked examples are labelled as illustrations in the article and figure captions.
+Every number in them is derived from the sources above; the arithmetic lives in
+`visuals.mjs` next to this file. Python snippets in the article were run before
+publishing (Python 3.11, standard library only).
+
+## LLMiser rebrand re-verification (2026-10-20)
+
+The article was rebranded from MDify to LLMiser and every claim was re-checked. Current sources:
+
+- OpenAI, What are tokens and how to count them (help article, confirmed via search results 2026-10-20, direct fetch returns 403): https://help.openai.com/en/articles/4936856-what-are-tokens-and-how-to-count-them. 1 token is about 4 characters or 0.75 English words.
+- Claude glossary, fetched 2026-10-20: https://platform.claude.com/docs/en/about-claude/glossary. Claude 4.7 and later use a tokenizer that produces about 30% more tokens for the same text than earlier models, on which a token is about 3.5 English characters.
+- Claude pricing, fetched 2026-10-20: https://platform.claude.com/docs/en/about-claude/pricing. Haiku 5.5 $0.10/$0.50 (prompts up to 100k tokens; $0.50/$2.50 above), Haiku 4.5 $1/$5, Sonnet 5.5 $2/$10, Opus 5.5 $4/$20, Fable 5.1 $10/$50 per MTok. Output is 5x input on every one of them. Cache hits: 0.1x standard, 0.05x on Sonnet 5.5 and Opus 5.5, 0.025x on Fable 5.1. 5-minute write 1.25x, 1-hour write 2x. Batch 50% on input and output. Caching and batch discounts stack. Claude 4.6 and later (except Haiku 5.5) bill the full 1M context at standard rates. Tool-use system prompt 286 tokens (Opus/Sonnet/Haiku 5.5, auto) up to 804 (Opus 4.7, any/tool). The page no longer states a words-per-token figure.
+- Claude PDF support, fetched 2026-10-20: https://platform.claude.com/docs/en/build-with-claude/pdf-support. Each page is converted into an image and its extracted text is sent alongside. Text typically 1,500-3,000 tokens per page depending on density. Amazon Bedrock Converse API (Claude Opus 4.6 and earlier): about 1,000 tokens text-only versus about 7,000 with full visual understanding for a 3-page PDF.
+- Chroma, Context Rot (14 Jul 2025), fetched 2026-10-20 at the new URL https://www.trychroma.com/research/context-rot (old research.trychroma.com URL redirects). 18 LLMs, performance grows increasingly unreliable as input length grows.
+- Chroma, Evaluating Chunking Strategies (3 Jul 2024), fetched 2026-10-20 at https://www.trychroma.com/research/evaluating-chunking. Up to 9% recall difference. Token-wise IoU counts redundant overlap tokens once.
+- LLMiser app features checked 2026-10-20: frontend/lib/formats.js (20 files per batch), frontend/lib/siteContent.js, backendN/app/common/profiles.py (RAG-ready marker), token estimate = characters / 4 (frontend/components/OutputStatusBar.js).
diff --git a/blog-pipeline/Blogs/reduce-llm-token-usage/visuals.mjs b/blog-pipeline/Blogs/reduce-llm-token-usage/visuals.mjs
new file mode 100644
index 0000000..64428b8
--- /dev/null
+++ b/blog-pipeline/Blogs/reduce-llm-token-usage/visuals.mjs
@@ -0,0 +1,125 @@
+// Visuals for "Why Your LLM Token Usage Is So High, and How to Fix It" (LLMiser)
+import { B, art, banner, cards, figure, flow, hbars, legend, note, stacked } from '../../visuals/kit.mjs';
+
+const ID = 'rtu';
+
+// 10-turn chat: 1,000-token system prompt, 150-token questions, 350-token answers.
+// Input at turn k = 1,000 + 150 + 500 * (k - 1). Sum over 10 turns = 34,000.
+const turn = (k) => 1000 + 150 + 500 * (k - 1);
+
+export default {
+ banner: banner({
+ id: `${ID}-banner`,
+ kicker: 'TOKEN USAGE',
+ hook: ['Where do all', 'the tokens go?'],
+ sub: 'six quiet leaks, and how to plug them',
+ art: () => {
+ let out = '';
+ // A gauge in the red.
+ out += ``;
+ out += ``;
+ out += ``;
+ out += ``;
+ out += ``;
+ out += ``;
+ // Token chips spilling out.
+ const chips = [[1010, 330, 70], [1090, 312, 50], [960, 352, 56], [1050, 360, 44], [1120, 350, 38]];
+ chips.forEach(([x, y, w], i) => {
+ out += art.chip(x, y - 10, w, [B.amber, B.lav, B.pink][i % 3], { h: 20 });
+ });
+ out += art.label(890, 260, 'tokens', { size: 22, anchor: 'middle' });
+ return out;
+ },
+ }),
+
+ figures: {
+ 'history-growth': figure({
+ title: 'Every turn resends the whole chat',
+ subtitle: 'Input tokens per turn in a 10-turn chat: 1,000-token system prompt, 150-token questions, 350-token answers.',
+ parts: [
+ hbars([
+ { label: 'Turn 1', value: turn(1), s: 's2' },
+ { label: 'Turn 4', value: turn(4), s: 's2' },
+ { label: 'Turn 7', value: turn(7), s: 's2' },
+ { label: 'Turn 10', value: turn(10), s: 's3', note: 'almost 5x turn 1' },
+ ], { unit: '' }),
+ note('Ten short questions sent 34,000 input tokens in total. The questions themselves were 1,500 of them.'),
+ ],
+ }),
+
+ 'request-anatomy': figure({
+ title: 'Anatomy of one "simple" question',
+ subtitle: 'An example request to a document assistant. The question is the smallest part.',
+ parts: [
+ legend([
+ { s: 's1', name: 'Question' },
+ { s: 's2', name: 'Instructions and tools' },
+ { s: 's3', name: 'History and documents' },
+ ]),
+ stacked([
+ {
+ label: 'As sent',
+ parts: [
+ { v: 80, s: 's1', name: 'question' },
+ { v: 2500, s: 's2', name: 'system prompt' },
+ { v: 1200, s: 's2', name: 'tool definitions' },
+ { v: 4000, s: 's3', name: 'chat history' },
+ { v: 6000, s: 's3', name: 'raw PDF pages' },
+ ],
+ total: '13,780',
+ },
+ {
+ label: 'Trimmed',
+ parts: [
+ { v: 80, s: 's1', name: 'question' },
+ { v: 900, s: 's2', name: 'system prompt' },
+ { v: 300, s: 's2', name: 'tool definitions' },
+ { v: 600, s: 's3', name: 'history summary' },
+ { v: 1300, s: 's3', name: 'relevant sections as Markdown' },
+ ],
+ total: '3,180',
+ },
+ ], { max: 13780 }),
+ note('Illustrative numbers. Measure your own requests: most APIs return input token counts with every response.'),
+ ],
+ }),
+
+ 'pdf-modes': figure({
+ title: 'The same 3-page PDF, two ways',
+ subtitle: 'From the Claude PDF docs (Amazon Bedrock Converse API): text extraction only versus full visual understanding.',
+ parts: [
+ hbars([
+ { label: 'Text extraction only', value: 1000, display: '~1,000 tokens', s: 's1' },
+ { label: 'Text plus page images', value: 7000, display: '~7,000 tokens', s: 's2', note: '7x' },
+ ]),
+ ],
+ }),
+
+ 'six-fixes': figure({
+ title: 'Six leaks, six fixes',
+ parts: [
+ cards([
+ { k: '01', title: 'Raw PDFs', sub: 'Convert to Markdown first. Attach page images only for charts.', s: 's3' },
+ { k: '02', title: 'Long chat history', sub: 'Start fresh threads. Carry over a short summary.', s: 's3' },
+ { k: '03', title: 'Oversized prompts', sub: 'Cut rules the model already follows. Cache the rest.', s: 's2' },
+ { k: '04', title: 'Unused tools', sub: 'Send only the tools this request can use.', s: 's2' },
+ { k: '05', title: 'Duplicate text', sub: 'Strip repeated headers, footers and boilerplate.', s: 's3' },
+ { k: '06', title: 'Whole documents', sub: 'Retrieve the sections that answer the question.', s: 's3' },
+ ], { cols: 2, h: 112 }),
+ ],
+ }),
+
+ 'audit-loop': figure({
+ title: 'A 30-minute token audit',
+ parts: [
+ flow([
+ { t: 'Log usage', sub: 'input and output per call' },
+ { t: 'Split by part', sub: 'prompt, history, docs' },
+ { t: 'Find the biggest', sub: 'fix that one first', s: 's1' },
+ { t: 'Re-test answers', sub: 'same questions, same checks' },
+ { t: 'Measure again', sub: 'keep it or roll it back' },
+ ], { cols: 3, boxH: 84 }),
+ ],
+ }),
+ },
+};
diff --git a/blog-pipeline/Blogs/why-pdfs-are-expensive-for-ai/sources.md b/blog-pipeline/Blogs/why-pdfs-are-expensive-for-ai/sources.md
new file mode 100644
index 0000000..e95b4b4
--- /dev/null
+++ b/blog-pipeline/Blogs/why-pdfs-are-expensive-for-ai/sources.md
@@ -0,0 +1,28 @@
+# why-pdfs-are-expensive-for-ai
+
+## Keyword notes
+
+Primary and secondary keywords come from the owner's brief in `Blogs/Blog List 01.txt`.
+Search volumes were NOT measured for these terms in this session (no Keyword Planner
+access). Re-check them before investing in more articles on the same cluster.
+
+## Sources (all accessed 2026-10-03)
+- PDF support: https://platform.claude.com/docs/en/build-with-claude/pdf-support (each page as image + extracted text; 1,500-3,000 text tokens per page; Bedrock: ~1,000 tokens text-only vs ~7,000 full visual for a 3-page PDF)
+- Vision: https://platform.claude.com/docs/en/build-with-claude/vision (ceil(w/28) x ceil(h/28) visual tokens; caps 1,568 standard / 4,784 high-res)
+- MDify's own worked example: frontend/lib/siteContent.js TOKEN_EXAMPLE (667 vs 2,235 vs 3,381 tokens; 70% / 80%). Features checked in frontend/lib/formats.js and backend*/app/common/profiles.py.
+
+## Worked examples and code
+
+All worked examples are labelled as illustrations in the article and figure captions.
+Every number in them is derived from the sources above; the arithmetic lives in
+`visuals.mjs` next to this file. Python snippets in the article were run before
+publishing (Python 3.11, standard library only).
+
+## LLMiser rebrand re-verification (2026-10-20)
+
+The article was rebranded from MDify to LLMiser and every claim was re-checked. Current sources:
+
+- Claude PDF support, fetched 2026-10-20: https://platform.claude.com/docs/en/build-with-claude/pdf-support. Each page is converted into an image and its extracted text is sent alongside. Text typically 1,500-3,000 tokens per page depending on density. Amazon Bedrock Converse API (Claude Opus 4.6 and earlier): about 1,000 tokens text-only versus about 7,000 with full visual understanding for a 3-page PDF.
+- Claude vision, fetched 2026-10-20: https://platform.claude.com/docs/en/build-with-claude/vision. ceil(w/28) x ceil(h/28) visual tokens. Standard tier (all models before Claude 4.7): 1,568 px long edge and 1,568 tokens max. High-resolution tier (Claude 4.7 and later): 2,576 px and 4,784 tokens.
+- House worked example (blog-pipeline/03-BRAND-ENTITY.md): 500-word US Letter page at 150 dpi, about 667 text tokens (0.75 words per token), 2,714 image patches, capped near 1,568 on the standard tier. 2,235 vs 667 tokens (about 70%) standard, 3,381 vs 667 (about 80%) high resolution. Replaces the old MDify siteContent TOKEN_EXAMPLE reference.
+- LLMiser app features checked 2026-10-20: frontend/lib/formats.js (20 files per batch), frontend/lib/siteContent.js, backendN/app/common/profiles.py (RAG-ready marker), token estimate = characters / 4 (frontend/components/OutputStatusBar.js).
diff --git a/blog-pipeline/Blogs/why-pdfs-are-expensive-for-ai/visuals.mjs b/blog-pipeline/Blogs/why-pdfs-are-expensive-for-ai/visuals.mjs
new file mode 100644
index 0000000..0b7727d
--- /dev/null
+++ b/blog-pipeline/Blogs/why-pdfs-are-expensive-for-ai/visuals.mjs
@@ -0,0 +1,154 @@
+// Visuals for "PDFs Are Expensive for AI: Here's Why" (LLMiser)
+import { B, C, F, art, banner, custom, figure, flow, hbars, line, note, panels, rect, text } from '../../visuals/kit.mjs';
+
+const ID = 'wpe';
+
+export default {
+ banner: banner({
+ id: `${ID}-banner`,
+ kicker: 'PDF + AI',
+ hook: ['PDFs are', 'expensive for AI.'],
+ sub: 'the cost is in the extraction, not the file',
+ art: () => {
+ let out = art.page(760, 50, 230, 300, { lines: 9, lineColor: '#d9b8cf' });
+ // Noise markers on the page.
+ out += ``;
+ out += ``;
+ out += ``;
+ // Price tag.
+ out += ``;
+ out += ``;
+ out += `7x`;
+ out += ``;
+ return out;
+ },
+ }),
+
+ figures: {
+ 'seven-times': figure({
+ title: 'Same 3 pages, seven times the tokens',
+ subtitle: 'Claude PDF docs, Amazon Bedrock Converse API: text extraction only versus each page also read as an image.',
+ parts: [
+ hbars([
+ { label: 'Text extraction only', value: 1000, display: '~1,000 tokens', s: 's1' },
+ { label: 'Text plus page images', value: 7000, display: '~7,000 tokens', s: 's3', note: '7x' },
+ ]),
+ note('Per page, extracted text typically uses 1,500 to 3,000 tokens depending on density, according to the same docs (checked 20 October 2026).'),
+ ],
+ }),
+
+ 'page-anatomy': figure({
+ title: 'Where a PDF page hides extra tokens',
+ subtitle: 'Each marked area turns into tokens you pay for but the model does not need.',
+ parts: [
+ custom(330, (y) => {
+ let s = '';
+ const px = 40;
+ const pw = 300;
+ s += rect(px, y, pw, 320, { fill: C.surface2, stroke: C.border3, r: 8 });
+ const zone = (x, yy, w, h, n, col) => rect(x, yy, w, h, { fill: col, fo: 0.18, stroke: col, sw: 1.6, r: 5 })
+ + text(x + 8, yy + 15, n, { size: 12, font: F.mono, weight: 700, fill: C.ink });
+ s += zone(px + 12, y + 10, pw - 24, 22, '1', C.s3);
+ for (let c = 0; c < 2; c += 1) {
+ for (let r = 0; r < 5; r += 1) {
+ s += rect(px + 20 + c * 140, y + 50 + r * 18, 118 - (r % 2) * 22, 6, { fill: C.border3, r: 3 });
+ }
+ }
+ s += zone(px + 12, y + 42, pw - 24, 96, '2', C.s2);
+ s += zone(px + 12, y + 150, pw - 24, 80, '3', C.s2);
+ for (let r = 0; r < 3; r += 1) for (let c = 0; c < 4; c += 1) s += rect(px + 24 + c * 66, y + 172 + r * 18, 56, 10, { fill: C.border3, r: 2 });
+ s += zone(px + 12, y + 242, 130, 40, '4', C.s3);
+ s += zone(px + 12, y + 290, pw - 24, 22, '5', C.s3);
+ const labels = [
+ ['1', 'Running header on every page'],
+ ['2', 'Two columns read line by line'],
+ ['3', 'Table flattened into numbers'],
+ ['4', 'Scanned or image-only text'],
+ ['5', 'Footer, legal line, page number'],
+ ];
+ labels.forEach(([n, t], i) => {
+ const ly = y + 30 + i * 62;
+ s += rect(370, ly - 18, 24, 24, { fill: i === 1 || i === 2 ? C.s2 : C.s3, fo: 0.2, stroke: i === 1 || i === 2 ? C.s2 : C.s3, r: 12 });
+ s += text(382, ly - 1, n, { size: 13, font: F.mono, weight: 700, anchor: 'middle' });
+ const words = t.split(' ');
+ const half = Math.ceil(words.length / 2);
+ s += text(402, ly - 1, words.slice(0, half).join(' '), { size: 15, weight: 600 });
+ s += text(402, ly + 18, words.slice(half).join(' '), { size: 14, fill: C.muted });
+ });
+ return s;
+ }),
+ ],
+ }),
+
+ 'repeats': figure({
+ title: 'Three pages, three copies of the noise',
+ subtitle: 'Extracted text from consecutive pages. Struck lines repeat on every page of the report.',
+ parts: [
+ panels([
+ {
+ title: 'pages 12-14, extracted',
+ tag: '6 repeats',
+ s: 's3',
+ lines: [
+ { t: 'ACME Corp | Annual Report 2025', k: 'noise' },
+ { t: 'Revenue grew 18% in the fiscal year.' },
+ { t: 'Page 12 | Confidential', k: 'noise' },
+ { t: 'ACME Corp | Annual Report 2025', k: 'noise' },
+ { t: 'Operating costs fell 4%.' },
+ { t: 'Page 13 | Confidential', k: 'noise' },
+ { t: 'ACME Corp | Annual Report 2025', k: 'noise' },
+ { t: 'Headcount rose to 240.' },
+ { t: 'Page 14 | Confidential', k: 'noise' },
+ ],
+ },
+ ]),
+ note('On a 60-page report that is 120 lines of noise. Each is small, and they are sent with every question.'),
+ ],
+ }),
+
+ 'table-fragments': figure({
+ title: 'What happens to a table',
+ parts: [
+ panels([
+ {
+ title: 'Raw extraction',
+ tag: 'which number is which?',
+ s: 's3',
+ lines: [
+ { t: 'Region Q1 Q2 Q3 Q4', k: 'dim' },
+ { t: 'North 4.1 4.4 4.9 5.2 South', k: 'dim' },
+ { t: '3.0 3.1 2.8 3.3 West 1.9 2.2', k: 'dim' },
+ { t: '2.5 2.6', k: 'dim' },
+ ],
+ },
+ {
+ title: 'Markdown',
+ tag: 'columns kept',
+ s: 's1',
+ lines: [
+ { t: '| Region | Q1 | Q2 | Q3 | Q4 |' },
+ { t: '|--------|-----|-----|-----|-----|' },
+ { t: '| North | 4.1 | 4.4 | 4.9 | 5.2 |' },
+ { t: '| South | 3.0 | 3.1 | 2.8 | 3.3 |' },
+ { t: '| West | 1.9 | 2.2 | 2.5 | 2.6 |' },
+ ],
+ },
+ ]),
+ ],
+ }),
+
+ 'fix-flow': figure({
+ title: 'Fix it once, before the AI reads it',
+ parts: [
+ flow([
+ { t: 'PDF', sub: 'text, scans, tables' },
+ { t: 'Convert to Markdown', sub: 'headings, lists, tables', s: 's1' },
+ { t: 'Strip repeats', sub: 'headers, footers', s: 's1' },
+ { t: 'Chunk by heading', sub: 'one topic each' },
+ { t: 'Index', sub: 'once per document' },
+ { t: 'Ask', sub: 'send relevant chunks', s: 's1' },
+ ], { cols: 3, boxH: 98 }),
+ ],
+ }),
+ },
+};
diff --git a/blog-pipeline/Blogs/why-your-llm-bill-is-too-high/sources.md b/blog-pipeline/Blogs/why-your-llm-bill-is-too-high/sources.md
new file mode 100644
index 0000000..d40ed6b
--- /dev/null
+++ b/blog-pipeline/Blogs/why-your-llm-bill-is-too-high/sources.md
@@ -0,0 +1,29 @@
+# why-your-llm-bill-is-too-high
+
+## Keyword notes
+
+Primary and secondary keywords come from the owner's brief in `Blogs/Blog List 01.txt`.
+Search volumes were NOT measured for these terms in this session (no Keyword Planner
+access). Re-check them before investing in more articles on the same cluster.
+
+## Sources (all accessed 2026-10-03)
+- Claude pricing: https://platform.claude.com/docs/en/about-claude/pricing (list prices: Haiku 4.5 $1/$5, Sonnet 5.5 $2/$10, Opus 5.5 $4/$20, Fable 5.1 $10/$50 per MTok; output 5x input; 1 token ~ 4 chars ~ 0.75 words; newer tokenizer ~30% more tokens; tool-use system prompt 286-675 tokens; caching and batch discounts stack)
+- Prompt caching: https://platform.claude.com/docs/en/build-with-claude/prompt-caching (5-min write 1.25x, hit 0.1x, 5-minute default lifetime)
+- Ong et al., RouteLLM, 2024 (ICLR 2025): https://arxiv.org/abs/2406.18665 (cost reduced by over 2x without sacrificing response quality; confirmed via search results, arXiv blocked)
+- MDify's own worked example: frontend/lib/siteContent.js TOKEN_EXAMPLE (667 vs 2,235 vs 3,381 tokens; 70% / 80%). Features checked in frontend/lib/formats.js and backend*/app/common/profiles.py.
+
+## Worked examples and code
+
+All worked examples are labelled as illustrations in the article and figure captions.
+Every number in them is derived from the sources above; the arithmetic lives in
+`visuals.mjs` next to this file. Python snippets in the article were run before
+publishing (Python 3.11, standard library only).
+
+## LLMiser rebrand re-verification (2026-10-20)
+
+The article was rebranded from MDify to LLMiser and every claim was re-checked. Current sources:
+
+- Claude pricing, fetched 2026-10-20: https://platform.claude.com/docs/en/about-claude/pricing. Haiku 5.5 $0.10/$0.50 (prompts up to 100k tokens; $0.50/$2.50 above), Haiku 4.5 $1/$5, Sonnet 5.5 $2/$10, Opus 5.5 $4/$20, Fable 5.1 $10/$50 per MTok. Output is 5x input on every one of them. Cache hits: 0.1x standard, 0.05x on Sonnet 5.5 and Opus 5.5, 0.025x on Fable 5.1. 5-minute write 1.25x, 1-hour write 2x. Batch 50% on input and output. Caching and batch discounts stack. Claude 4.6 and later (except Haiku 5.5) bill the full 1M context at standard rates. Tool-use system prompt 286 tokens (Opus/Sonnet/Haiku 5.5, auto) up to 804 (Opus 4.7, any/tool). The page no longer states a words-per-token figure.
+- Ong et al., RouteLLM, ICLR 2025: https://arxiv.org/abs/2406.18665. Confirmed via search results 2026-10-20: cost reduced by over 2x without sacrificing response quality on public benchmarks.
+- House worked example (blog-pipeline/03-BRAND-ENTITY.md): 500-word US Letter page at 150 dpi, about 667 text tokens (0.75 words per token), 2,714 image patches, capped near 1,568 on the standard tier. 2,235 vs 667 tokens (about 70%) standard, 3,381 vs 667 (about 80%) high resolution. Replaces the old MDify siteContent TOKEN_EXAMPLE reference.
+- LLMiser app features checked 2026-10-20: frontend/lib/formats.js (20 files per batch), frontend/lib/siteContent.js, backendN/app/common/profiles.py (RAG-ready marker), token estimate = characters / 4 (frontend/components/OutputStatusBar.js).
diff --git a/blog-pipeline/Blogs/why-your-llm-bill-is-too-high/visuals.mjs b/blog-pipeline/Blogs/why-your-llm-bill-is-too-high/visuals.mjs
new file mode 100644
index 0000000..9cccad3
--- /dev/null
+++ b/blog-pipeline/Blogs/why-your-llm-bill-is-too-high/visuals.mjs
@@ -0,0 +1,129 @@
+// Visuals for "Why Your LLM Bill Is Too High, and Where the Waste Hides" (LLMiser)
+import { B, art, banner, cards, figure, hbars, legend, note, panels, stacked, waterfall } from '../../visuals/kit.mjs';
+
+const ID = 'wlb';
+
+// One document question, in input-token equivalents (output counted at 5x,
+// the output/input price ratio on current Claude models).
+const BLOATED = [
+ { label: 'Your question', add: 60, s: 's1', name: 'question' },
+ { label: 'Duplicated system prompt', add: 2000, s: 's2', name: 'system prompt' },
+ { label: 'Full chat history', add: 5000, s: 's3', name: 'history' },
+ { label: 'Raw PDF, 6 pages', add: 13410, s: 's3', name: 'document' },
+ { label: 'Off-topic retrieval', add: 4000, s: 's3', name: 'retrieval' },
+ { label: '1,500-token answer (x5)', add: 7500, s: 's2', name: 'answer' },
+];
+const LEAN = [
+ { v: 60, s: 's1', name: 'question' },
+ { v: 200, s: 's2', name: 'cached system prompt' },
+ { v: 800, s: 's3', name: 'history summary' },
+ { v: 1334, s: 's3', name: '2 relevant pages as Markdown' },
+ { v: 1000, s: 's3', name: 'trimmed retrieval' },
+ { v: 2500, s: 's2', name: '500-token answer (x5)' },
+];
+
+export default {
+ banner: banner({
+ id: `${ID}-banner`,
+ kicker: 'LLM BILL',
+ hook: ['Paying for tokens', 'nobody needed?'],
+ sub: 'find the waste before you switch models',
+ art: () => {
+ let out = '';
+ const stack = (x, n, color, label) => {
+ let s = '';
+ for (let i = 0; i < n; i += 1) s += ``;
+ s += art.label(x, 362, label, { size: 18, anchor: 'middle' });
+ return s;
+ };
+ out += stack(760, 11, B.pink, 'you pay');
+ out += stack(930, 5, B.amber, 'you need');
+ // Magnifying glass over the gap between the two stacks.
+ out += ``;
+ out += ``;
+ out += `leaks`;
+ out += art.arrow(1008, 196, 968, 236, { sw: 3 });
+ return out;
+ },
+ }),
+
+ figures: {
+ 'bloated-request': figure({
+ title: 'How one question becomes 31,970 tokens',
+ subtitle: 'Input-token equivalents for one document question. Output counted at 5x, its price ratio to input.',
+ parts: [
+ waterfall(BLOATED.map(({ label, add, s }) => ({ label, add, s })), { totalLabel: 'Total' }),
+ note('Illustration, not a measurement. The PDF pages are counted as text plus a page image (2,235 tokens each).'),
+ ],
+ }),
+
+ 'bloated-vs-lean': figure({
+ title: 'Same question, same answer quality',
+ subtitle: 'The lean version keeps everything the model needs and drops what it doesn\'t.',
+ parts: [
+ legend([
+ { s: 's1', name: 'Question' },
+ { s: 's2', name: 'Prompt and answer' },
+ { s: 's3', name: 'History, documents, retrieval' },
+ ]),
+ stacked([
+ { label: 'Bloated', parts: BLOATED.map(({ add, s, name }) => ({ v: add, s, name })), total: '31,970' },
+ { label: 'Lean', parts: LEAN, total: '5,894', note: '5.4x smaller' },
+ ], { max: 31970 }),
+ ],
+ }),
+
+ 'model-tiers': figure({
+ title: 'The model you default to',
+ subtitle: 'Input price per million tokens across current Claude tiers, checked 20 October 2026.',
+ parts: [
+ hbars([
+ { label: 'Haiku 5.5', value: 0.1, display: '$0.10', s: 's1', note: 'prompts up to 100k' },
+ { label: 'Haiku 4.5', value: 1, display: '$1', s: 's1' },
+ { label: 'Sonnet 5.5', value: 2, display: '$2', s: 's2' },
+ { label: 'Opus 5.5', value: 4, display: '$4', s: 's2' },
+ { label: 'Fable 5.1', value: 10, display: '$10', s: 's3', note: '100x Haiku 5.5' },
+ ]),
+ note('Output costs 5x input on every tier shown. Claude pricing page, list prices.'),
+ ],
+ }),
+
+ 'six-leaks': figure({
+ title: 'Six leaks to look for',
+ parts: [
+ cards([
+ { k: '01', title: 'Repeated prompt', sub: 'Same instructions on every call. Cache or trim.', s: 's2' },
+ { k: '02', title: 'Endless history', sub: 'Old turns resent forever. Summarize.', s: 's3' },
+ { k: '03', title: 'Raw documents', sub: 'PDF pages as images. Convert to Markdown.', s: 's3' },
+ { k: '04', title: 'Off-topic retrieval', sub: 'Chunks nobody reads. Rerank and cap.', s: 's3' },
+ { k: '05', title: 'Overkill model', sub: 'Top tier for easy tasks. Route.', s: 's2' },
+ { k: '06', title: 'Wordy output', sub: 'Long answers at 5x. Ask for less.', s: 's2' },
+ ], { cols: 2, h: 100 }),
+ ],
+ }),
+
+ 'audit-checklist': figure({
+ title: 'The one-hour cost audit',
+ subtitle: 'Run it on a day of real traffic, not a demo.',
+ parts: [
+ panels([
+ {
+ title: 'cost-audit.md',
+ tag: 'monthly',
+ s: 's1',
+ lines: [
+ { t: '## 1. Measure', k: 'head' },
+ { t: '[ ] Log input and output tokens per call' },
+ { t: '[ ] Split input: prompt, history, docs, retrieval' },
+ { t: '## 2. Fix the top three', k: 'head' },
+ { t: '[ ] Biggest part first, one change at a time' },
+ { t: '## 3. Prove it', k: 'head' },
+ { t: '[ ] Re-run a fixed set of real questions' },
+ { t: '[ ] Keep only changes that hold quality' },
+ ],
+ },
+ ]),
+ ],
+ }),
+ },
+};
diff --git a/blog-pipeline/CANNIBALIZATION.md b/blog-pipeline/CANNIBALIZATION.md
new file mode 100644
index 0000000..8716d1f
--- /dev/null
+++ b/blog-pipeline/CANNIBALIZATION.md
@@ -0,0 +1,43 @@
+# Intent ownership and overlap control
+
+The goal is one preferred URL per reader task. No process guarantees zero cannibalization in live search. This pack prevents known exact collisions, requires semantic review and monitors results.
+
+## Reservation rules
+
+1. Search `intent-registry.json` by task, primary term, synonyms and desired output. Include homepage and `/usecase`.
+2. Use the existing owner if the answer would substantially duplicate it. A reworded title is not a new intent.
+3. Reserve a unique ID, canonical path, intent key and primary phrase before drafting. Keep Word/DOCX, Excel/XLSX and ZIP/codebase variants together unless evidence supports a different task.
+4. Name nearest competing pages and explicit boundaries in the brief. Secondary phrases may occur naturally on several pages; they must not become competing titles, introductions and main answers.
+5. Compare localized top results for candidate and nearest owner using the same engine/date/device. Normalize URLs. Five shared URLs among ten is a local editorial trigger to investigate merging, not a search-engine rule. Less overlap does not prove independence.
+6. When results mainly show tools, do not disguise a guide as a tool. Homepage owns generic converter transactions; support guides deliver walkthroughs or troubleshooting.
+
+## Current boundaries
+
+| Owner | Owns | Links out for |
+| --- | --- | --- |
+| HOME | LLMiser tool, cost optimizer, generic PDF/Markdown converter | Cost theory, detailed tutorials |
+| USE | Why use LLMiser, benefits and limitations | Provider cost strategy |
+| E01 reduce-llm-api-costs | Actions to reduce API spend | E02 diagnosis; E03 token audit |
+| E02 why-your-llm-bill-is-too-high | Diagnose cost drivers | Full implementation of E01 levers |
+| E03 reduce-llm-token-usage | Excess input/history/output tokens | E05 retrieval-specific tuning |
+| E04 rag-cost-optimization | Cost across RAG lifecycle | E05 retrieved-context cleanup |
+| E05 hidden-token-tax-rag-pipelines | Retrieval waste, overlap/top-K | E08 full pipeline setup |
+| E06 why-pdfs-are-expensive-for-ai | PDF ingestion paths and charges | E07 comparison; M02 OCR quality checks |
+| E07 markdown-vs-pdf-llm-tokens | Conditional input-format comparison | E06 extraction context; no separate broad cleanup page |
+| E08 document-to-llm-pipeline | End-to-end ingestion sequence | M01–M06 preparation checks |
+
+These are editorial assignments, not assertions that every current page already obeys them. Open R01–R04 reviews are in `research/review-register.json`.
+
+## Monitoring and remediation
+
+Inspect indexing and canonicals first. Compare query-to-page results over equal windows. If the wrong page repeatedly owns a task, inspect title, scope and internal links. Improve the intended owner and narrow the support page when warranted. Consolidation/redirect is a separate reviewed implementation preserving useful content and inbound links. Do not blanket-noindex useful guides or cross-canonical distinct pages.
+
+Legacy MDify public hosts retain permanent redirects and remain crawlable for migration. No new article targets MDify or markdify.com. Canonicals use `https://llmiser.devbehindyou.com` without tracking.
+
+## Automation limits
+
+`scripts/validate-plan.mjs` rejects duplicate normalized primary/alias ownership, duplicate URL/intent/title, invalid metadata, missing briefs and source-inventory drift. It reports current primary/secondary overlap and open reviews. It does not query search engines or assess semantic similarity. Passing is one gate, never a “cannibalization-free” certificate.
+
+## Selected campaign
+
+Use [the manual overlap review](campaign/OVERLAP_REVIEW.md) alongside exact ownership checks. Different keywords alone do not establish different search intent. Search Console query/page evidence and final drafts remain necessary; zero future cannibalization cannot be guaranteed.
diff --git a/blog-pipeline/MAIN_BLOG_AUDIT.md b/blog-pipeline/MAIN_BLOG_AUDIT.md
new file mode 100644
index 0000000..54a5f77
--- /dev/null
+++ b/blog-pipeline/MAIN_BLOG_AUDIT.md
@@ -0,0 +1,118 @@
+# Existing LLMiser blog audit
+
+Date: 4 November 2026. Baseline: `8eb8c5091e1b370ebf7ed9631621d07226960b7a`.
+Scope: eight currently published articles, live HTTP/metadata checks, repository content, selected primary-source checks and three illustrative-code reproductions. No public article, asset or application code was edited.
+
+## Verdict
+
+The site has a useful educational foundation: consistent LLMiser branding, clear openings, source links, worked examples and five supporting figures per article. The stronger articles explain document-input costs and retain caveats about visual information.
+
+It does not yet function as eight distinct main pillars. Most articles return to the same advice: shrink PDFs, trim context, retrieve fewer chunks and measure quality. Some narrower diagnoses deserve to sit below broader guides. Fix misleading claims and fragile examples, define each page's job, then commission support articles against the existing structure.
+
+This is an editorial/technical assessment, not evidence of a Google penalty, measured cannibalization or ranking potential. No Search Console/Bing query-to-page data was available.
+
+## What was verified live
+
+All eight canonical article URLs returned HTTP 200. Each had its own correct LLMiser canonical, matching source H1 and description, `index, follow`, and no X-Robots-Tag restriction in the inspected response. This establishes accessibility and stated indexing directives, not actual indexing or Google-selected canonicals.
+
+The initial web tool and sandboxed requests could not reach the site. A subsequent permitted direct public HTTP fetch succeeded. Final results are saved in [live evidence](research/main-blog-live-audit.json). Live article text is included there for comparison. All eight responses lacked `dateModified`; source inspection confirms the article schema helper does not emit it.
+
+## Article-by-article assessment
+
+IDs refer to the current intent registry. Proposed roles below are recommendations, not URL changes.
+
+| ID / existing article | Best role | What works | What should change before expansion |
+| --- | --- | --- | --- |
+| E01 [Reduce LLM API costs](https://llmiser.devbehindyou.com/blog/reduce-llm-api-costs) | Main guide: cost-reduction actions | Practical levers, sources, worked arithmetic, explicit separation of LLMiser from provider routing/caching | Separate physical tokens from billable equivalents; label the standard-resolution PDF baseline as an assumption when using newer-model prices; qualify free-plan claims and the unexplained “six chunks = 1%” baseline |
+| E02 [Why the LLM bill is high](https://llmiser.devbehindyou.com/blog/why-your-llm-bill-is-too-high) | Diagnostic support under E01 | Layer-by-layer audit is useful | Intro/heading call a cost-weighted total a token count; avoid claiming the same information survives pruning without an answer-quality test; hand off fixes to E01 instead of repeating them |
+| E03 [High token usage](https://llmiser.devbehindyou.com/blog/reduce-llm-token-usage) | Cross-cutting diagnostic support under E01 | Separates context contributors; rough estimator is labeled | Define the distinction from E02 as physical token accounting, not bill diagnosis; narrow claims about all chat apps replaying whole history and smaller inputs guaranteeing more free-plan questions |
+| E04 [RAG cost optimization](https://llmiser.devbehindyou.com/blog/rag-cost-optimization) | Main guide: RAG economics | Lifecycle cost map and ingestion/query distinction | Token volumes from different services are not a full cost comparison; include actual rates, re-ingestion, storage and reranker costs before a break-even claim; move detailed top-K tuning to E05 |
+| E05 [Hidden RAG token tax](https://llmiser.devbehindyou.com/blog/hidden-token-tax-rag-pipelines) | Technical support under E04 | Specific retrieved-context focus and useful overlap arithmetic | Example deduplication can discard materially different facts; label heuristic token budget; link to E04 and E08; replace broad cleanup/quality guarantees with testable statements |
+| E06 [Why PDFs cost more](https://llmiser.devbehindyou.com/blog/why-pdfs-are-expensive-for-ai) | Explanation/support under E07 | Explains image-plus-text ingestion and warns about OCR | Correct blanket claims that PDFs have no headings/structure; fix destructive cleanup example; reduce duplication of E07's savings math and full conversion advice |
+| E07 [Markdown versus PDF](https://llmiser.devbehindyou.com/blog/markdown-vs-pdf-llm-tokens) | Main guide: choosing document input representation | Closest fit to product; explains when original charts/images matter | Replace implied guaranteed extraction/structure retention with observed limitations; distinguish cap-based estimate from actual resized image tokens; add a reproducible product example before using it as performance evidence |
+| E08 [Document-to-LLM pipeline](https://llmiser.devbehindyou.com/blog/document-to-llm-pipeline) | Main guide: ingestion workflow | Natural parent for future format/OCR/ZIP how-tos; practical sequence | Chunker breaks fenced code and does not create promised page ranges; broad “cheapest format,” “costs flat” and page-count recommendations need conditions; link to E04/E05 instead of repeating their detail |
+
+Keep all eight URLs for now. Narrowing scope and linking them coherently is preferable to deleting pages based on a textual overlap assessment alone. Consolidation would require query/page evidence, inbound-link review and a separate migration decision.
+
+## Priority findings
+
+### A01 — Three published Python examples can lose meaning (high priority)
+
+These are small educational snippets, not demonstrated production application bugs. Their limitations should be fixed or made prominent before promoting them in support posts.
+
+1. **E06 repeated-line removal.** The function normalizes every digit sequence before comparing all lines. With pages `Revenue 100 / Unique A`, `Revenue 200 / Unique B`, `Revenue 300 / Unique C`, it removes all three revenue lines. The existing generic caveat is insufficient for this concrete numeric loss. Restrict any proposed cleanup to identified header/footer zones or an explicit review list; retain original output.
+2. **E05 context deduplication.** Two clauses differing only in “5 business days” versus “15 business days” exceed the word-set similarity threshold. The second is dropped. Similar words do not establish equivalent facts. Preserve document/section/version identity and material numbers/negation; do not use lexical similarity alone to discard evidence.
+3. **E08 Markdown chunker.** A `# comment` inside a Python fenced block becomes a document heading. The function splits the fence and attributes following text to a bogus section. It also slices long text at arbitrary characters, which can cut tables/code, and emits no page-range field. Use a fence-aware/structure-aware implementation or clearly limited pseudocode; page provenance must come from extraction, not be invented.
+
+Reproduction outputs are in [source evidence](research/main-blog-source-audit.json). No app production conversion behavior was tested by these snippet checks.
+
+### A02 — The bill article mixes actual token count and cost equivalents (high priority)
+
+E02's 31,970 total weights 1,500 output tokens at a 5× input-price ratio, contributing 7,500 to the sum. Under the stated assumptions, the physical input-plus-output count is 25,970. Its body later explains the cost-equivalent method, but the excerpt and heading say “tokens.” The lean comparison also includes discounted cached input as equivalents: caching changes charges, not the physical prompt size.
+
+Keep separate columns for physical input/output, cache-hit tokens and calculated currency cost. Use “input-price token equivalents” only when consistently defined. Do not advertise the cost ratio as a context-length reduction.
+
+E01's cached table row likewise labels a price-weighted input equivalent as “Input tokens.” Its surrounding explanation helps but does not fix the table label.
+
+### A03 — PDF/Markdown claims exceed the evidence (high priority)
+
+E06 says PDF contains no paragraph, heading or table structure. Tagged PDFs can preserve a structure tree; [W3C's PDF heading technique](https://www.w3.org/WAI/WCAG22/Techniques/pdf/PDF9) documents it. The accurate problem is that many PDFs are untagged or extraction does not reliably retain structure, not that the format cannot contain it.
+
+Several pages assert that Markdown conversion removes most repeated text, preserves tables, improves retrieval, or makes every later question cheaper. Markdown is an output representation, not a guarantee of those transformations. The current profile source mostly adjusts source-line/whitespace formatting and adds chunk markers; it does not establish universal header/footer removal or semantic table repair. Extraction may preserve some structures, but that needs representative evidence.
+
+“Same information” after pruning and “loses none of the answers” after dropping page images need evaluation, not just plausible arithmetic. Similarly, smaller input does not establish how a hosted free plan applies its usage limits.
+
+### A04 — Repeated illustrative savings are not eight independent results (medium/high)
+
+The 500-word, 667-text-token and roughly 2,235-standard-PDF-token example recurs across articles and figures. It is generally labeled, which is good. Repetition still risks making it appear like a broad measured product result.
+
+The [current Claude vision documentation](https://platform.claude.com/docs/en/build-with-claude/vision) supports 28×28 patches and resolution-tier limits, but images are resized under both edge and patch limits. The standard maximum is an approximation, not an exact prediction for every page. Newer high-resolution models also do not automatically use the standard-tier baseline. Pair price and input-path assumptions explicitly in E01.
+
+E01's “six chunks from 100 pages is about 1%” lacks chunk-size/denominator context. With the E08 assumptions, 3,000 tokens are about 1.34% of its multimodal baseline but 4.50% of its 66,700-token text corpus. This is a clarification issue, not a universal correction to 4.5%.
+
+Spot checks of [current Claude pricing](https://platform.claude.com/docs/en/about-claude/pricing) matched the quoted Haiku/Sonnet/Opus prices and relevant cache ratios. Do not label all named models or prices fabricated. The issue is scope, consistency and maintenance.
+
+The cited 1,000/7,000 three-page Bedrock example appears in an official indexed older page excerpt, but was not found in the current direct PDF documentation response. Preserve its historical context or refresh its exact primary reference; do not call it a newly verified universal benchmark.
+
+### A05 — Weak body-link hierarchy despite extensive shared subject matter (medium)
+
+There are only four cross-article hyperlinks in the eight article bodies, all pointing to E07. E04 and E05 do not link to each other; E08 links to no sibling article. This count excludes image URLs and shared navigation.
+
+Proposed contextual relationships:
+- E01 → E02 for diagnosis; E03 for physical token accounting; E07 for document representation.
+- E02/E03 → E01 for implementing cost actions.
+- E04 ↔ E05 for economics versus retrieval tuning.
+- E08 → E04 for economics, E05 for packing retrieved context, E07 for representation choice.
+- E06 ↔ E07 for ingestion explanation versus format decision.
+
+Add links only at useful handoff points. No forced reciprocal-link quota. New support articles should link to their most relevant existing parent.
+
+### A06 — Freshness and social metadata have gaps (lower priority)
+
+All posts carry 3 October publication dates while some body claims say checked 20 October. No post currently sets `updated`. The parser accepts that field, but `frontend/lib/articleSeo.mjs` emits neither JSON-LD `dateModified` nor Open Graph modified time. The page reader shows the publication date.
+
+Use an actual material-update date if known and display it coherently. Do not backfill a date merely for ranking. A source-check date and an article-modification date are different.
+
+Every article currently uses the shared OG card despite distinct SVG banners. This is a presentation opportunity, not a canonical/indexing defect. It needs renderer support and suitable raster assets; frontmatter alone will not implement it.
+
+## Proposed hierarchy before support expansion
+
+Four main guides: E01 cost reduction; E04 RAG economics; E07 PDF-versus-Markdown decision; E08 document pipeline.
+Four existing supporting/diagnostic guides: E02 bill diagnosis; E03 token accounting; E05 retrieval waste; E06 PDF ingestion costs.
+
+New support briefs remain provisional. In particular:
+- S01/S06 OCR tutorials must add actual conversion/verification evidence, not repeat PDF-cost theory.
+- S02 codebase ZIP and S03–S05 Office guides can add distinct tasks beneath E08.
+- S07 cleanup already overlaps practical material in E06; decide whether it expands E06 or becomes a distinct tested walkthrough before reserving it as final.
+- S09 product profiles has a narrow, useful task; verify actual transformations.
+- S10 CSV stays conditional against S03.
+
+## Recommended next phase
+
+1. Review and resolve A01–A03 in the current articles, with factual/source and illustrative-code checks.
+2. Confirm the four-main/four-support boundaries and update the intent registry/brief exclusions accordingly.
+3. Add useful internal handoffs and preserve existing canonical URLs.
+4. Collect one original document-input comparison with output-quality checks, then commission a pilot support article.
+5. Monitor actual query/page data before any consolidation.
+
+This audit does not authorize or perform those public edits. The owner requested analysis first. Current articles, banners, figures and runtime remain unchanged.
diff --git a/blog-pipeline/MAIN_TOPIC_OPTIONS.md b/blog-pipeline/MAIN_TOPIC_OPTIONS.md
new file mode 100644
index 0000000..1ab1a45
--- /dev/null
+++ b/blog-pipeline/MAIN_TOPIC_OPTIONS.md
@@ -0,0 +1,145 @@
+# Proposed main-blog topics and title choices
+
+Prepared 4 November 2026; finalized 5 November 2026. Status: HISTORICAL OPTIONS. The owner selected all twelve titles on 5 November 2026. See [selected titles](campaign/selected-titles.json) and the [active campaign](campaign/README.md). No article is drafted or published, and no search-volume claim is made.
+
+## New campaign structure
+
+Interpretation of the owner's latest constraint: **3 support articles per main blog; 3 posts per support article**.
+
+| Asset | Count |
+| --- | ---: |
+| New main blogs | 12 |
+| Support articles | 36 |
+| Supporting posts | 108 |
+| Total planned assets | 156 |
+
+The 12 main blogs comprise exactly 6 listicles, 4 LLMiser usage/features guides and 2 related AI/LLM topics. There are three title alternatives per main topic, all verified at 60 characters or fewer, counting spaces and punctuation. The owner has selected one title per topic. Alternatives are not separate articles.
+
+Existing eight public blogs remain outside this new-campaign count. This supersedes the old archive's 8-posts-per-support model. It also replaces the previous two-channel pilot allocation for these new campaign assets. The three post channels/formats are not yet selected; do not assume three platforms or repeat the same text.
+
+Several proposed main topics promote earlier unpublished support briefs into main-blog candidates. The prior IDs below are lineage references, not additional articles to publish. The current registry is reconciled; the following lineage explains the historical proposals. In particular, S01/S06 become one OCR review topic rather than two competing general tutorials; S07 remains deferred and must be reconciled with the existing PDF articles.
+
+The existing-main-blog audit and its accuracy findings still stand. This title-selection task does not implement the recommended public edits.
+
+## Options
+
+### 1. Preparing a codebase ZIP for AI (Listicle)
+
+- **A.** 7 Files to Exclude From Your AI Project ZIP (43 characters)
+- **B.** 7 Things to Remove Before Sharing a Codebase With AI (52 characters)
+- **C.** 7 Ways to Prepare a Cleaner Codebase ZIP for AI (47 characters)
+
+Scope boundary: Own project-file selection and preparation; leave returned artifact interpretation to topic 10.
+Prior brief lineage: S02.
+
+### 2. Checking OCR output before AI use (Listicle)
+
+- **A.** 9 OCR Checks Before You Send Scanned Text to AI (47 characters)
+- **B.** 9 Ways to Check Scanned Documents Before AI Use (47 characters)
+- **C.** 9 OCR Mistakes to Look for Before Trusting AI Input (51 characters)
+
+Scope boundary: Own OCR quality review across scans and image input; do not repeat the existing PDF cost comparison.
+Prior brief lineage: S01/S06.
+
+### 3. Excel-to-Markdown quality checks (Listicle)
+
+- **A.** 7 Checks for Excel-to-Markdown Tables (37 characters)
+- **B.** 7 Excel Details to Check Before Sharing Data With AI (52 characters)
+- **C.** 7 Ways to Prepare Excel Tables for AI (37 characters)
+
+Scope boundary: Own workbook/sheet/value review; delimiter troubleshooting belongs to topic 6.
+Prior brief lineage: S03.
+
+### 4. Word-to-Markdown structure (Listicle)
+
+- **A.** 6 Checks Before Converting Word to Markdown (43 characters)
+- **B.** 6 Ways to Prepare Word Documents for AI (39 characters)
+- **C.** 6 Word Formatting Fixes for Cleaner Markdown (44 characters)
+
+Scope boundary: Own DOCX headings, lists, tables and source preparation; do not promise perfect structural preservation.
+Prior brief lineage: S04.
+
+### 5. PowerPoint-to-Markdown review (Listicle)
+
+- **A.** 8 Checks When Converting PowerPoint to Markdown (47 characters)
+- **B.** 8 Slide Details to Review Before Using AI (41 characters)
+- **C.** 8 Ways to Prepare PowerPoint Slides for AI (42 characters)
+
+Scope boundary: Own slide order, text and visual-context inspection; verify notes/chart behavior.
+Prior brief lineage: S05.
+
+### 6. CSV-to-Markdown troubleshooting (Listicle)
+
+- **A.** 7 CSV Checks Before Converting Data to Markdown (47 characters)
+- **B.** 7 CSV Formatting Problems to Fix Before AI Use (46 characters)
+- **C.** 7 Ways to Prepare Cleaner CSV Data for AI (41 characters)
+
+Scope boundary: Own delimiters, quoting, encoding and row shape; confirm distinction from workbook topic 3 before commissioning.
+Prior brief lineage: S10.
+
+### 7. Converting a batch of files (LLMiser guide)
+
+- **A.** How to Convert Multiple Files With LLMiser (42 characters)
+- **B.** From Multiple Files to Markdown: A LLMiser Guide (48 characters)
+- **C.** Batch Convert Documents to Markdown With LLMiser (48 characters)
+
+Scope boundary: Own batch upload, per-file review and download workflow; no second end-to-end RAG pipeline guide.
+Prior brief lineage: New.
+
+### 8. Choosing a conversion profile (LLMiser guide)
+
+- **A.** Which LLMiser Conversion Profile Should You Use? (48 characters)
+- **B.** LLMiser Profiles: Standard, Clean, Compact, RAG-ready (53 characters)
+- **C.** How to Choose the Right Profile in LLMiser (42 characters)
+
+Scope boundary: Own actual profile transformations and trade-offs; no promise of automatic retrieval or model billing savings.
+Prior brief lineage: S09.
+
+### 9. Reviewing, editing and exporting output (LLMiser guide)
+
+- **A.** How to Edit and Export Markdown With LLMiser (44 characters)
+- **B.** From Conversion to Copy: Review Markdown in LLMiser (51 characters)
+- **C.** How to Prepare Your Final Markdown in LLMiser (45 characters)
+
+Scope boundary: Own post-conversion review/editor/export; topic 7 owns batch intake and job-level workflow.
+Prior brief lineage: New.
+
+### 10. Understanding ZIP conversion artifacts (LLMiser guide)
+
+- **A.** How to Read LLMiser's ZIP Index and Manifest (44 characters)
+- **B.** Inside Your LLMiser ZIP Conversion Results (42 characters)
+- **C.** Use LLMiser's Project Index to Review ZIP Results (49 characters)
+
+Scope boundary: Own actual PROJECT_INDEX.md/manifest outputs and completeness checks; topic 1 owns selecting files before upload.
+Prior brief lineage: S08.
+
+### 11. Instructions hidden in source documents (AI/LLM miscellaneous)
+
+- **A.** When Your Documents Try to Give AI Instructions (47 characters)
+- **B.** Prompt Injection: Can a Document Hijack Your AI? (48 characters)
+- **C.** Your Document Is Data, Not Your AI's Boss (41 characters)
+
+Scope boundary: Explain document content versus trusted instructions. Do not claim LLMiser detects or neutralizes prompt injection.
+Prior brief lineage: New.
+
+### 12. Conflicting document versions (AI/LLM miscellaneous)
+
+- **A.** Why Two Versions of a Document Can Confuse AI (45 characters)
+- **B.** Is Your AI Answering From an Outdated Document? (47 characters)
+- **C.** The Hidden Problem of Conflicting Documents in AI (49 characters)
+
+Scope boundary: Own provenance, dates and conflicting versions; not another general hallucination or lexical-deduplication guide.
+Prior brief lineage: New.
+
+## Support planning gate
+
+The active campaign now assigns one distinct primary task to each main article and precisely three narrower questions underneath it. Support articles must extend a specific detail, example or troubleshooting question; they must not restate the main checklist in new words. Review against both the eight existing blogs and all twelve main candidates, not just the selected title strings.
+
+Give each support article three individually useful post briefs. Channels remain pending; article destinations are reserved in campaign/posts.json. No posts are sent or scheduled by this plan. Use the current source/brand/visual/claims and publication rules. Selected titles do not establish search demand or guarantee independent intent.
+
+## Research basis for miscellaneous topics
+
+- Topic 11: [Anthropic's prompt-injection research](https://www.anthropic.com/research/prompt-injection-defenses) discusses untrusted external content as an instruction attack surface. This is a reader-education topic, not a new LLMiser security feature.
+- Topic 12: [Microsoft's RAG retrieval guidance](https://learn.microsoft.com/en-us/azure/architecture/ai-ml/guide/rag/rag-information-retrieval) discusses retrieval filtering. The proposed version-conflict angle is an editorial inference; no search-volume or frequency estimate is claimed.
+
+Other topics are grounded in inspected LLMiser capabilities and the earlier main-blog audit. Numbered lists specify the proposed article structure, not already completed tests or established universal rules.
diff --git a/blog-pipeline/Outputs/README.md b/blog-pipeline/Outputs/README.md
new file mode 100644
index 0000000..a808ebe
--- /dev/null
+++ b/blog-pipeline/Outputs/README.md
@@ -0,0 +1,5 @@
+# Outputs
+
+`check.mjs` writes one quality report per article here:
+`Outputs/{slug}.check.txt`. Keep the last passing report with the article's
+commit so reviewers can see what was checked.
diff --git a/blog-pipeline/Outputs/document-to-llm-pipeline.check.txt b/blog-pipeline/Outputs/document-to-llm-pipeline.check.txt
new file mode 100644
index 0000000..b829f11
--- /dev/null
+++ b/blog-pipeline/Outputs/document-to-llm-pipeline.check.txt
@@ -0,0 +1,11 @@
+LLMiser article check: frontend/content/blog/document-to-llm-pipeline.md
+Date: 2026-10-20T15:28:18.021Z
+Words: 1591, read time 7 min
+
+Errors (0):
+ none
+
+Warnings (0):
+ none
+
+RESULT: PASS
diff --git a/blog-pipeline/Outputs/hidden-token-tax-rag-pipelines.check.txt b/blog-pipeline/Outputs/hidden-token-tax-rag-pipelines.check.txt
new file mode 100644
index 0000000..9f0ef86
--- /dev/null
+++ b/blog-pipeline/Outputs/hidden-token-tax-rag-pipelines.check.txt
@@ -0,0 +1,11 @@
+LLMiser article check: frontend/content/blog/hidden-token-tax-rag-pipelines.md
+Date: 2026-10-20T15:28:18.236Z
+Words: 1439, read time 6 min
+
+Errors (0):
+ none
+
+Warnings (0):
+ none
+
+RESULT: PASS
diff --git a/blog-pipeline/Outputs/markdown-vs-pdf-llm-tokens.check.txt b/blog-pipeline/Outputs/markdown-vs-pdf-llm-tokens.check.txt
new file mode 100644
index 0000000..0c53a02
--- /dev/null
+++ b/blog-pipeline/Outputs/markdown-vs-pdf-llm-tokens.check.txt
@@ -0,0 +1,11 @@
+LLMiser article check: frontend/content/blog/markdown-vs-pdf-llm-tokens.md
+Date: 2026-10-20T15:28:18.425Z
+Words: 1991, read time 9 min
+
+Errors (0):
+ none
+
+Warnings (0):
+ none
+
+RESULT: PASS
diff --git a/blog-pipeline/Outputs/mdify-2026-10-03/document-to-llm-pipeline.check.txt b/blog-pipeline/Outputs/mdify-2026-10-03/document-to-llm-pipeline.check.txt
new file mode 100644
index 0000000..a1632fe
--- /dev/null
+++ b/blog-pipeline/Outputs/mdify-2026-10-03/document-to-llm-pipeline.check.txt
@@ -0,0 +1,11 @@
+MDify article check: frontend/content/blog/document-to-llm-pipeline.md
+Date: 2026-10-03T19:50:27.609Z
+Words: 1529, read time 7 min
+
+Errors (0):
+ none
+
+Warnings (0):
+ none
+
+RESULT: PASS
diff --git a/blog-pipeline/Outputs/mdify-2026-10-03/hidden-token-tax-rag-pipelines.check.txt b/blog-pipeline/Outputs/mdify-2026-10-03/hidden-token-tax-rag-pipelines.check.txt
new file mode 100644
index 0000000..5285f5f
--- /dev/null
+++ b/blog-pipeline/Outputs/mdify-2026-10-03/hidden-token-tax-rag-pipelines.check.txt
@@ -0,0 +1,11 @@
+MDify article check: frontend/content/blog/hidden-token-tax-rag-pipelines.md
+Date: 2026-10-03T19:50:27.664Z
+Words: 1411, read time 6 min
+
+Errors (0):
+ none
+
+Warnings (1):
+ ! Three sentences in a row of similar length, starting "An untuned pipeline retrieves 20 chunks of about 400 tokens ..."
+
+RESULT: PASS
diff --git a/blog-pipeline/Outputs/mdify-2026-10-03/markdown-vs-pdf-llm-tokens.check.txt b/blog-pipeline/Outputs/mdify-2026-10-03/markdown-vs-pdf-llm-tokens.check.txt
new file mode 100644
index 0000000..edb2cee
--- /dev/null
+++ b/blog-pipeline/Outputs/mdify-2026-10-03/markdown-vs-pdf-llm-tokens.check.txt
@@ -0,0 +1,11 @@
+MDify article check: frontend/content/blog/markdown-vs-pdf-llm-tokens.md
+Date: 2026-10-03T19:50:27.724Z
+Words: 1832, read time 8 min
+
+Errors (0):
+ none
+
+Warnings (0):
+ none
+
+RESULT: PASS
diff --git a/blog-pipeline/Outputs/mdify-2026-10-03/rag-cost-optimization.check.txt b/blog-pipeline/Outputs/mdify-2026-10-03/rag-cost-optimization.check.txt
new file mode 100644
index 0000000..e2105b2
--- /dev/null
+++ b/blog-pipeline/Outputs/mdify-2026-10-03/rag-cost-optimization.check.txt
@@ -0,0 +1,11 @@
+MDify article check: frontend/content/blog/rag-cost-optimization.md
+Date: 2026-10-03T19:50:27.817Z
+Words: 1458, read time 6 min
+
+Errors (0):
+ none
+
+Warnings (0):
+ none
+
+RESULT: PASS
diff --git a/blog-pipeline/Outputs/mdify-2026-10-03/reduce-llm-api-costs.check.txt b/blog-pipeline/Outputs/mdify-2026-10-03/reduce-llm-api-costs.check.txt
new file mode 100644
index 0000000..b3656e6
--- /dev/null
+++ b/blog-pipeline/Outputs/mdify-2026-10-03/reduce-llm-api-costs.check.txt
@@ -0,0 +1,11 @@
+MDify article check: frontend/content/blog/reduce-llm-api-costs.md
+Date: 2026-10-03T19:50:27.876Z
+Words: 1703, read time 7 min
+
+Errors (0):
+ none
+
+Warnings (0):
+ none
+
+RESULT: PASS
diff --git a/blog-pipeline/Outputs/mdify-2026-10-03/reduce-llm-token-usage.check.txt b/blog-pipeline/Outputs/mdify-2026-10-03/reduce-llm-token-usage.check.txt
new file mode 100644
index 0000000..964582e
--- /dev/null
+++ b/blog-pipeline/Outputs/mdify-2026-10-03/reduce-llm-token-usage.check.txt
@@ -0,0 +1,11 @@
+MDify article check: frontend/content/blog/reduce-llm-token-usage.md
+Date: 2026-10-03T19:50:27.931Z
+Words: 1518, read time 7 min
+
+Errors (0):
+ none
+
+Warnings (0):
+ none
+
+RESULT: PASS
diff --git a/blog-pipeline/Outputs/mdify-2026-10-03/why-pdfs-are-expensive-for-ai.check.txt b/blog-pipeline/Outputs/mdify-2026-10-03/why-pdfs-are-expensive-for-ai.check.txt
new file mode 100644
index 0000000..97d982e
--- /dev/null
+++ b/blog-pipeline/Outputs/mdify-2026-10-03/why-pdfs-are-expensive-for-ai.check.txt
@@ -0,0 +1,11 @@
+MDify article check: frontend/content/blog/why-pdfs-are-expensive-for-ai.md
+Date: 2026-10-03T19:50:27.996Z
+Words: 1534, read time 7 min
+
+Errors (0):
+ none
+
+Warnings (0):
+ none
+
+RESULT: PASS
diff --git a/blog-pipeline/Outputs/mdify-2026-10-03/why-your-llm-bill-is-too-high.check.txt b/blog-pipeline/Outputs/mdify-2026-10-03/why-your-llm-bill-is-too-high.check.txt
new file mode 100644
index 0000000..c845ebb
--- /dev/null
+++ b/blog-pipeline/Outputs/mdify-2026-10-03/why-your-llm-bill-is-too-high.check.txt
@@ -0,0 +1,11 @@
+MDify article check: frontend/content/blog/why-your-llm-bill-is-too-high.md
+Date: 2026-10-03T19:50:28.053Z
+Words: 1458, read time 6 min
+
+Errors (0):
+ none
+
+Warnings (1):
+ ! Three sentences in a row of similar length, starting "Convert PDFs to Markdown before they reach the model...."
+
+RESULT: PASS
diff --git a/blog-pipeline/Outputs/rag-cost-optimization.check.txt b/blog-pipeline/Outputs/rag-cost-optimization.check.txt
new file mode 100644
index 0000000..2bcb844
--- /dev/null
+++ b/blog-pipeline/Outputs/rag-cost-optimization.check.txt
@@ -0,0 +1,11 @@
+LLMiser article check: frontend/content/blog/rag-cost-optimization.md
+Date: 2026-10-20T15:28:18.605Z
+Words: 1497, read time 7 min
+
+Errors (0):
+ none
+
+Warnings (0):
+ none
+
+RESULT: PASS
diff --git a/blog-pipeline/Outputs/reduce-llm-api-costs.check.txt b/blog-pipeline/Outputs/reduce-llm-api-costs.check.txt
new file mode 100644
index 0000000..948773d
--- /dev/null
+++ b/blog-pipeline/Outputs/reduce-llm-api-costs.check.txt
@@ -0,0 +1,11 @@
+LLMiser article check: frontend/content/blog/reduce-llm-api-costs.md
+Date: 2026-10-20T15:28:18.801Z
+Words: 1829, read time 8 min
+
+Errors (0):
+ none
+
+Warnings (0):
+ none
+
+RESULT: PASS
diff --git a/blog-pipeline/Outputs/reduce-llm-token-usage.check.txt b/blog-pipeline/Outputs/reduce-llm-token-usage.check.txt
new file mode 100644
index 0000000..e12bf22
--- /dev/null
+++ b/blog-pipeline/Outputs/reduce-llm-token-usage.check.txt
@@ -0,0 +1,11 @@
+LLMiser article check: frontend/content/blog/reduce-llm-token-usage.md
+Date: 2026-10-20T15:28:19.245Z
+Words: 1566, read time 7 min
+
+Errors (0):
+ none
+
+Warnings (0):
+ none
+
+RESULT: PASS
diff --git a/blog-pipeline/Outputs/why-pdfs-are-expensive-for-ai.check.txt b/blog-pipeline/Outputs/why-pdfs-are-expensive-for-ai.check.txt
new file mode 100644
index 0000000..3fc0420
--- /dev/null
+++ b/blog-pipeline/Outputs/why-pdfs-are-expensive-for-ai.check.txt
@@ -0,0 +1,11 @@
+LLMiser article check: frontend/content/blog/why-pdfs-are-expensive-for-ai.md
+Date: 2026-10-20T15:28:19.435Z
+Words: 1610, read time 7 min
+
+Errors (0):
+ none
+
+Warnings (0):
+ none
+
+RESULT: PASS
diff --git a/blog-pipeline/Outputs/why-your-llm-bill-is-too-high.check.txt b/blog-pipeline/Outputs/why-your-llm-bill-is-too-high.check.txt
new file mode 100644
index 0000000..baaab62
--- /dev/null
+++ b/blog-pipeline/Outputs/why-your-llm-bill-is-too-high.check.txt
@@ -0,0 +1,11 @@
+LLMiser article check: frontend/content/blog/why-your-llm-bill-is-too-high.md
+Date: 2026-10-20T15:28:19.622Z
+Words: 1576, read time 7 min
+
+Errors (0):
+ none
+
+Warnings (0):
+ none
+
+RESULT: PASS
diff --git a/blog-pipeline/PUBLISHING.md b/blog-pipeline/PUBLISHING.md
new file mode 100644
index 0000000..8810ba1
--- /dev/null
+++ b/blog-pipeline/PUBLISHING.md
@@ -0,0 +1,47 @@
+# Draft-to-publication gates
+
+This pack creates local plans. Nothing here schedules external posts or makes drafts public. Later article work follows its active task authorization and the gates below.
+
+## Before writing
+
+- Reserve ID/owner in the registry. Inspect current repo state and published inventory.
+- Review nearest intents and open review IDs. Capture actual SERP observations or mark unavailable; do not pretend a provider search was a localized Google audit.
+- Record product fit and official sources. Use draft claims for anything not tested.
+- Choose a reproducible, non-sensitive fixture. Never upload private customer data for a public demo.
+
+## Before public files change
+
+- Sources/claim ledger complete. Numbers are sourced or clearly illustrative.
+- Original example tested; actual output and omissions saved privately.
+- Metadata fits renderer and one owned intent. No fabricated author or dates.
+- Banner + four useful figures reviewed in both themes and narrow view.
+- Internal links target existing pages, or pages included in the same release. Proposed URLs are not live links.
+- Reviewer confirms semantic boundaries. M03/M06 require the R04 boundary review; each support requires the R07/R08 reviews.
+- Keep existing public articles unchanged unless their revision is part of the active assignment.
+
+## Technical publication checklist
+
+From repo root, use the real final slug:
+```powershell
+node blog-pipeline/scripts/validate-plan.mjs
+node blog-pipeline/check.mjs frontend/content/blog/reserved-slug.md
+```
+
+From `frontend/`:
+```powershell
+npm run blog:index
+npm run blog:check
+node --test test/blog.test.mjs test/seo.test.mjs
+npm run lint
+npm run build
+```
+
+The template slug is not a runnable publication instruction. Fix errors; review warnings rather than suppressing the checker. Inspect rendered article, metadata, BlogPosting, canonical, shared OG image, sitemap, links and `llms.txt` guide list. The static article route must return 200 after deployment. Keep drafts out of generated public data.
+
+Only public Markdown, approved SVGs, generated index and relevant discovery changes belong in a publication PR. Keep raw research, sources ledger, fixture outputs and this pipeline private. Inspect the diff and run the normal CI workflow. Existing user authorization for passing PR merges/deployment persists when implementing an assigned release; these checks do not create a new permission requirement.
+
+## After publication
+
+Record actual URL, revision, date, validation evidence and changed files. Verify live canonical/indexability, then prepare or finalize social variants. An owner-authorized social publisher verifies the destination and submits separately. Check Search Console/Bing when access exists; do not manufacture indexing confirmation.
+
+Update the registry from PROPOSED to IMPLEMENTED only after files exist, and VERIFIED only for specifically recorded checks. Keep deployment/indexing/traffic status separate. Run plan validation after updating the source inventory. The `--preservation` baseline checks this planning task's untouched assets; after an authorized blog release, archive it and create a new dated baseline rather than silently overwriting history.
diff --git a/blog-pipeline/Posts/Posts List 01.txt b/blog-pipeline/Posts/Posts List 01.txt
new file mode 100644
index 0000000..34992a6
--- /dev/null
+++ b/blog-pipeline/Posts/Posts List 01.txt
@@ -0,0 +1,1153 @@
+# MDify Social Media Content Pack — 50 Unique Posts
+
+**Brand:** MDify
+**Website:** https://markdify.com
+**Positioning:** Convert messy documents and project files into cleaner, structured Markdown for LLMs, RAG pipelines, AI agents, and developer workflows.
+
+> **Claim note:** Use “up to 70% token-cost savings” only where you have benchmark evidence for the specific workflow. Where possible, frame it as “can reduce unnecessary token usage” or “up to 70% in tested/eligible workflows.”
+
+---
+
+# X.com — 10 Posts
+
+## X Post 1 — Token Waste
+
+Your LLM bill may be higher because of the files you send it.
+
+Raw PDFs can contain repeated headers, broken layouts, OCR noise and irrelevant text.
+
+MDify converts them into cleaner Markdown before they reach your AI stack.
+
+→ https://markdify.com
+
+#LLM #AI #RAG
+
+---
+
+## X Post 2 — PDF → Markdown
+
+A 100-page PDF shouldn’t automatically become 100 pages of LLM context.
+
+Extract. Clean. Structure. Chunk. Retrieve only what matters.
+
+That’s the workflow MDify is being built for.
+
+https://markdify.com
+
+#AI #LLM #Markdown
+
+---
+
+## X Post 3 — RAG Cost
+
+RAG isn’t cheap by default.
+
+Bad chunking + duplicate retrieval + noisy PDFs + oversized context = wasted tokens on every request.
+
+Cleaner documents are one of the easiest places to start.
+
+MDify → https://markdify.com
+
+#RAG #LLM #AI
+
+---
+
+## X Post 4 — ZIP Projects
+
+A ZIP file is not “one document.”
+
+It can contain:
+• code
+• PDFs
+• screenshots
+• nested ZIPs
+• binaries
+• docs
+
+MDify is being designed to inspect, classify and process each type correctly—then rebuild the project into AI-ready output.
+
+https://markdify.com
+
+---
+
+## X Post 5 — AI Cost Cutting
+
+Want to reduce AI costs?
+
+Don’t start by downgrading your model.
+
+Start by reducing the junk you send to it:
+• duplicate context
+• raw PDF noise
+• repeated headers
+• irrelevant chunks
+• oversized prompts
+
+MDify helps clean the document layer first.
+
+markdify.com
+
+---
+
+## X Post 6 — Hybrid PDFs
+
+Not every PDF is really “text.”
+
+One file can contain:
+31 native pages
+9 mixed pages
+8 scanned pages
+
+A smarter pipeline extracts text where possible and uses OCR only where needed.
+
+That’s the direction behind MDify.
+
+https://markdify.com
+
+---
+
+## X Post 7 — AI-Ready Context
+
+Raw file → LLM is convenient.
+
+Raw file → clean structure → chunk → retrieve → LLM is usually smarter.
+
+MDify focuses on that middle layer: turning messy files into AI-ready Markdown.
+
+https://markdify.com
+
+#AIEngineering #RAG
+
+---
+
+## X Post 8 — Developers
+
+If you’re building with OpenAI, Claude, Gemini or local LLMs, document quality matters.
+
+Cleaner Markdown means:
+• better chunking
+• easier retrieval
+• less layout noise
+• fewer wasted tokens
+
+Try MDify: https://markdify.com
+
+---
+
+## X Post 9 — Token Cost
+
+The cheapest token is the one you never send.
+
+Before optimizing model pricing, optimize your input.
+
+MDify converts documents into structured Markdown so your AI pipeline works with cleaner context.
+
+https://markdify.com
+
+#TokenOptimization #LLM
+
+---
+
+## X Post 10 — Product Launch
+
+I built MDify to solve a problem I kept seeing in AI workflows:
+
+We spend too much time optimizing models while feeding them messy documents.
+
+MDify turns files into cleaner, structured Markdown for LLMs, RAG and agents.
+
+Live: https://markdify.com
+
+---
+
+# LinkedIn — 10 Posts
+
+## LinkedIn Post 1 — The Hidden Cost Before the LLM
+
+Most teams trying to reduce LLM costs look at one thing first:
+
+**Model pricing.**
+
+But a large part of the waste can happen *before* the model is called.
+
+Raw PDFs often contain:
+
+- repeated headers and footers
+- broken reading order
+- OCR noise
+- unnecessary metadata
+- duplicated text
+- content that should never have been included in the prompt
+
+That means you can optimize your model and still keep paying for bad input.
+
+This is one of the reasons I built **MDify**.
+
+MDify converts documents into cleaner, structured Markdown that is easier to use with:
+
+- LLM applications
+- RAG pipelines
+- AI agents
+- vector databases
+- knowledge systems
+
+The idea is simple:
+
+**Cleaner input → less wasted context → more efficient AI workflows.**
+
+Try it at: https://markdify.com
+
+#AI #LLM #RAG #GenerativeAI #AIEngineering #MDify
+
+---
+
+## LinkedIn Post 2 — Stop Sending Whole Documents
+
+A bigger context window doesn’t mean we should fill it.
+
+One of the most expensive habits in AI applications is:
+
+**“Just send the whole document.”**
+
+A better pipeline is:
+
+**Document → Extract → Clean → Structure → Chunk → Retrieve → Send only what matters**
+
+This improves more than cost.
+
+It can also improve:
+
+- retrieval quality
+- prompt clarity
+- debugging
+- source traceability
+- consistency across models
+
+MDify is built around this document-to-AI layer.
+
+Instead of treating a PDF, image or project file as one giant blob, the goal is to turn it into structured content that downstream AI systems can actually use efficiently.
+
+https://markdify.com
+
+#LLM #RAG #AIArchitecture #DocumentAI
+
+---
+
+## LinkedIn Post 3 — PDFs Are Not Simple
+
+A PDF extension tells you almost nothing about what’s actually inside the file.
+
+A single PDF can contain:
+
+- native selectable text
+- screenshots with embedded text
+- scanned pages
+- diagrams
+- tables
+- image-only pages
+
+Running OCR on everything wastes compute.
+
+Running text extraction on everything misses scanned content.
+
+The better approach is **content-aware processing**.
+
+That’s where MDify is heading:
+
+**PDF Analyzer → page classification → native extraction / hybrid processing / OCR → ordered Markdown output**
+
+The user still gets one result.
+
+The complexity stays inside the platform.
+
+That’s the kind of abstraction I want MDify to provide.
+
+https://markdify.com
+
+#PDF #OCR #AI #LLM #SoftwareArchitecture
+
+---
+
+## LinkedIn Post 4 — Why ZIP Analysis Is Hard
+
+“Upload the project ZIP to AI.”
+
+Sounds simple.
+
+Until the ZIP contains:
+
+- 300 source files
+- screenshots
+- PDFs
+- generated folders
+- binaries
+- nested archives
+- documentation
+- dependency folders
+
+A ZIP is really a tree of different workloads.
+
+For MDify, the architecture I’m building is:
+
+**Safe Archive Inspector
+→ Directory Tree
+→ Recursive File Classifier
+→ Code/Text | Documents | Images | Nested ZIP
+→ Parallel processing
+→ Project Merger
+→ AI-ready output**
+
+Instead of flattening a project into one unreadable blob, MDify preserves its structure.
+
+This matters for codebase analysis, RAG ingestion and AI agents that need context—not chaos.
+
+https://markdify.com
+
+#AI #DeveloperTools #LLM #RAG #Codebase
+
+---
+
+## LinkedIn Post 5 — AI Cost Optimization
+
+If your AI bill is growing, there are several places to optimize before sacrificing quality:
+
+1. Reduce repeated context
+2. Compress oversized prompts
+3. Cache reusable results
+4. Route simple tasks to cheaper models
+5. Improve chunking
+6. Retrieve fewer, better chunks
+7. Clean documents before ingestion
+8. Limit unnecessary output tokens
+9. Avoid sending full files when only sections matter
+
+Model choice is only one part of AI cost optimization.
+
+Input quality matters just as much.
+
+MDify focuses on that input layer—turning files into structured Markdown for cleaner LLM and RAG workflows.
+
+https://markdify.com
+
+#AIOptimization #LLM #RAG #SaaS
+
+---
+
+## LinkedIn Post 6 — Building MDify
+
+A quick architecture note from building **MDify**.
+
+The platform is designed around four processing paths:
+
+**N1 + N2** → normal document processing
+**O1 + O2** → OCR-heavy workloads
+
+Files and generated results are stored through **Supabase Storage**, while job metadata, KPIs and audit data live in **Supabase Postgres**.
+
+The important part isn’t the number of services.
+
+It’s workload separation.
+
+A large OCR task shouldn’t block a normal document conversion.
+
+A complex ZIP shouldn’t launch 1,000 child processes at once.
+
+A scanned PDF shouldn’t force every native-text page through OCR.
+
+The architecture is being optimized around **bounded parallelism and content-aware routing**.
+
+That keeps the user experience simple while the processing layer becomes smarter.
+
+https://markdify.com
+
+#SystemDesign #AIEngineering #Supabase #Vercel #LLM
+
+---
+
+## LinkedIn Post 7 — Markdown as an AI Interface
+
+Markdown is becoming an underrated interface between documents and AI systems.
+
+Why?
+
+Because it gives you:
+
+- explicit headings
+- cleaner hierarchy
+- predictable text
+- easier chunking
+- simpler parsing
+- better portability
+- less layout noise than raw document extraction
+
+It’s not that Markdown magically makes an LLM smarter.
+
+It makes the *input pipeline* easier to control.
+
+That distinction matters.
+
+MDify is built around converting messy source files into structured Markdown that developers can use across models and AI stacks.
+
+https://markdify.com
+
+#Markdown #AI #RAG #LLM #DeveloperTools
+
+---
+
+## LinkedIn Post 8 — 70% Cost Positioning
+
+We’re testing a simple question with MDify:
+
+**How much unnecessary LLM cost can be removed before changing the model?**
+
+In eligible workflows, document cleanup and context reduction can make a major difference.
+
+Our focus is on:
+
+- removing document noise
+- reducing duplicated content
+- preserving useful structure
+- improving chunking
+- preventing irrelevant text from reaching the model
+
+The target is not “use less AI.”
+
+It’s **use AI more efficiently**.
+
+Where benchmarked workflows support it, MDify can help reduce token-related costs significantly—potentially up to 70%.
+
+Try it: https://markdify.com
+
+#LLMCost #AI #TokenOptimization #RAG
+
+---
+
+## LinkedIn Post 9 — RAG Quality Starts at Ingestion
+
+A lot of RAG debugging starts too late.
+
+Teams tune:
+
+- embeddings
+- vector databases
+- top-K
+- rerankers
+- prompts
+
+…but ignore the document that entered the pipeline.
+
+If your source content contains repeated headers, broken tables, OCR artifacts and bad reading order, the retrieval layer inherits those problems.
+
+RAG quality starts at ingestion.
+
+That’s one of the core ideas behind MDify:
+
+**clean and structure the content before embedding it.**
+
+Better retrieval starts with better source material.
+
+https://markdify.com
+
+#RAG #VectorDatabase #Embeddings #AIEngineering
+
+---
+
+## LinkedIn Post 10 — Product Invitation
+
+I’ve been building **MDify** around a simple problem:
+
+AI tools are getting better, but the files we feed them are still messy.
+
+PDFs. Screenshots. Spreadsheets. Documents. Project archives.
+
+The goal of MDify is to turn those inputs into structured, AI-ready Markdown without forcing users to understand OCR pipelines, parsers or conversion architecture.
+
+For developers, it means cleaner inputs for:
+
+- LLM prompts
+- RAG
+- AI agents
+- knowledge bases
+- indexing pipelines
+
+For everyone else, it means:
+
+**upload a file → get useful structured output.**
+
+MDify is live at:
+
+https://markdify.com
+
+If you work with document-heavy AI workflows, I’d genuinely like to hear what file type causes you the most trouble.
+
+#AI #SaaS #LLM #RAG #BuildInPublic
+
+---
+
+# Reddit — 10 Posts
+
+> **Reddit note:** These are intentionally discussion-first and transparent. Check each subreddit’s self-promotion rules before posting.
+
+## Reddit Post 1 — LLM Cost Discussion
+
+**Title:** I think we focus too much on model pricing and not enough on document/token waste
+
+I’ve been working on a document preprocessing tool called MDify, and one thing that keeps showing up is how much junk can enter an LLM pipeline before inference even starts.
+
+PDF extraction can introduce repeated headers, footers, broken columns, OCR artifacts, etc. Then RAG adds chunk overlap and sometimes duplicate retrieval on top of that.
+
+So even if the model itself is cheap, the context can still be unnecessarily expensive.
+
+The workflow I’m experimenting with is:
+
+`file → clean structured Markdown → chunk → retrieve → LLM`
+
+rather than:
+
+`raw file → LLM`
+
+Curious how people here handle document cleanup before embedding/inference. Are you doing it at ingestion time or relying on the model to work around messy extraction?
+
+I’m building around this idea at https://markdify.com, but mainly interested in how others are solving it.
+
+---
+
+## Reddit Post 2 — Mixed PDFs
+
+**Title:** How do you handle PDFs that are half native text and half scanned pages?
+
+This turned into a bigger problem than I expected.
+
+A PDF can have:
+
+- native text on some pages
+- screenshots with text on others
+- fully scanned pages
+- empty/image-heavy pages
+
+Running OCR on the entire document is wasteful and can actually make good text worse.
+
+Only doing native extraction obviously misses the scans.
+
+For MDify I’m moving toward page-level classification:
+
+`native → normal extraction`
+`mixed → native + OCR regions`
+`scan → OCR`
+
+Then merge everything back in page order.
+
+Has anyone here implemented something similar at scale? I’d be interested in what heuristics you use to distinguish “mixed” pages from image-only ones.
+
+---
+
+## Reddit Post 3 — ZIP Projects
+
+**Title:** How would you preprocess a 500-file ZIP before giving it to an LLM?
+
+I don’t think “upload the ZIP” is enough for serious project analysis.
+
+A typical archive might contain source code, PDFs, images, generated folders, dependencies, nested archives and binaries.
+
+I’m working on this architecture for MDify:
+
+`safe archive inspect → directory tree → recursive classifier → process by type → merge`
+
+Code/text stays code. Documents go through normal parsing. Images go through OCR. Nested ZIPs recurse with depth/size limits.
+
+The output is a project index + structured Markdown + converted project bundle.
+
+Would you prefer a single combined Markdown file or per-file Markdown + a manifest for LLM/RAG workflows?
+
+---
+
+## Reddit Post 4 — RAG Cost
+
+**Title:** What actually reduced your RAG costs the most?
+
+I’ve been looking at RAG cost optimization and I’m curious what has made the biggest measurable difference for others.
+
+My current list:
+
+- better chunk sizes
+- less overlap
+- lower top-K
+- reranking
+- metadata filters
+- caching
+- cheaper model routing
+- document cleanup before embedding
+
+The last one seems underrated.
+
+If the source document is noisy, every downstream step is working with bad material.
+
+I’m testing this with MDify by converting source files into cleaner Markdown before ingestion.
+
+What change produced the biggest cost/quality improvement in your setup?
+
+---
+
+## Reddit Post 5 — Markdown
+
+**Title:** Is Markdown becoming the default intermediate format for LLM pipelines?
+
+I keep coming back to Markdown as an intermediate representation.
+
+Not because LLMs “prefer Markdown” in some magical way, but because it gives you predictable headings, hierarchy, code blocks, lists and plain text without carrying a lot of visual document baggage.
+
+For document pipelines it makes chunking and debugging much easier.
+
+I’m using this idea heavily in MDify: source files → structured Markdown → whatever LLM/RAG stack the user wants.
+
+What format are you using internally—Markdown, plain text, HTML, JSON blocks, something custom?
+
+---
+
+## Reddit Post 6 — Architecture Feedback
+
+**Title:** Architecture feedback: 2 normal workers + 2 OCR workers for document conversion
+
+I’d appreciate feedback on a workload split I’m using for MDify.
+
+Normal pool:
+- N1
+- N2
+- document parsing / text extraction
+
+OCR pool:
+- O1
+- O2
+- image OCR / scanned PDF regions
+
+Uploads/results live in Supabase Storage and job/work-item state is in Postgres.
+
+A content analyzer creates small work items and dispatches them with bounded concurrency instead of sending a whole complex file to one worker.
+
+The goal is to keep OCR-heavy jobs from blocking normal conversions.
+
+Would you keep these as separate pools or collapse them and use one worker type with capability flags?
+
+---
+
+## Reddit Post 7 — Context Windows
+
+**Title:** Bigger context windows seem to encourage worse pipeline design
+
+One thing I’ve noticed: as context windows get larger, it becomes tempting to stop filtering.
+
+“Just send the whole document.”
+
+That works until costs rise, latency grows, retrieval quality suffers or the file is too messy to use directly.
+
+I’d rather treat long context as a safety net than a reason to skip preprocessing.
+
+For MDify I’m focusing on cleaning/structuring documents before they reach the model.
+
+Do you think larger context windows will eventually kill RAG for most workflows, or just change how aggressively we retrieve?
+
+---
+
+## Reddit Post 8 — OCR Orientation
+
+**Title:** OCR pipelines: how are you handling rotated scans reliably?
+
+During testing I found a very simple failure case: a 90° rotated image could completely destroy OCR accuracy if orientation handling is weak.
+
+Now I’m treating 0/90/180/270° cases as permanent regression tests.
+
+The pipeline is roughly:
+
+`inspect → orient → resize → grayscale → OCR`
+
+Trying to keep dependencies lightweight instead of pulling OpenCV into everything.
+
+What are people using for reliable orientation detection before Tesseract?
+
+---
+
+## Reddit Post 9 — Build in Public
+
+**Title:** I built a document-to-Markdown tool because I was tired of cleaning files before using AI
+
+Whenever I wanted to use documents with LLMs, I kept doing the same manual work:
+
+- clean PDF extraction
+- remove noise
+- fix structure
+- OCR screenshots
+- convert things into Markdown
+- prepare content for RAG
+
+So I turned that workflow into a product called MDify.
+
+It’s live at https://markdify.com.
+
+I’m still improving hybrid PDFs, archive/project processing and token-efficiency benchmarks.
+
+If you use AI with documents regularly, I’d love feedback on what format/file type is still the most painful for you.
+
+---
+
+## Reddit Post 10 — Benchmark Discussion
+
+**Title:** What would you consider a fair benchmark for “token savings” in a document preprocessing tool?
+
+I’m trying to avoid vague marketing around token savings.
+
+For MDify, I want any percentage claim to be backed by a reproducible benchmark.
+
+My thinking is to compare:
+
+1. raw extraction output
+2. cleaned structured Markdown
+3. token count using the same tokenizer
+4. same document/content coverage
+5. retrieval quality before/after
+
+Possibly across PDFs, DOCX, scans and mixed documents.
+
+What else would you include to make a “saved X% tokens” claim technically fair?
+
+---
+
+# Patreon — 10 Posts
+
+## Patreon Post 1 — Behind the Build
+
+**Title:** Building MDify: Why Document Cleanup Matters More Than I Expected
+
+AI models are improving incredibly fast, but one part of the workflow still feels surprisingly primitive: getting clean information out of files.
+
+While building MDify, I’ve seen how much unnecessary content can appear before an LLM even sees a document—duplicate headers, OCR noise, bad reading order and layout artifacts.
+
+That’s why I’m focusing MDify on the layer *before* the model.
+
+The goal is simple:
+
+**Take messy files and turn them into structured, AI-ready Markdown.**
+
+That means better inputs for RAG, agents, knowledge bases and everyday LLM workflows.
+
+You can try the current version here:
+
+https://markdify.com
+
+I’ll keep sharing architecture decisions, performance tests and features as MDify evolves.
+
+---
+
+## Patreon Post 2 — Hybrid PDF Update
+
+**Title:** MDify Dev Update: Smarter PDFs Are Coming
+
+A PDF is rarely just a PDF.
+
+Some pages contain perfect selectable text.
+
+Others are scans.
+
+Others combine native text with screenshots or image-based tables.
+
+I’m working on a hybrid processing pipeline for MDify that analyzes pages individually instead of forcing the entire document through one converter.
+
+The plan:
+
+**Native page → text extraction**
+**Scanned page → OCR**
+**Mixed page → combine both**
+
+Then MDify merges everything back into the original order.
+
+This should improve quality while avoiding unnecessary OCR work.
+
+More soon.
+
+https://markdify.com
+
+---
+
+## Patreon Post 3 — ZIP Architecture
+
+**Title:** How MDify Will Handle Complex Project ZIPs
+
+One of the more ambitious parts of MDify is project/archive conversion.
+
+Instead of treating a ZIP as a black box, MDify will inspect the structure and classify what’s inside:
+
+- source code
+- documents
+- PDFs
+- images
+- nested archives
+- unsupported binaries
+
+Each type is processed differently, then everything is rebuilt into an AI-friendly project output.
+
+The planned output includes:
+
+- `PROJECT_INDEX.md`
+- `manifest.json`
+- structured converted files
+- a converted project ZIP
+
+This is especially useful for AI agents, codebase analysis and RAG over project repositories.
+
+---
+
+## Patreon Post 4 — Architecture Note
+
+**Title:** Why MDify Uses Separate OCR and Normal Processing Pools
+
+OCR and normal document conversion behave very differently.
+
+OCR is CPU-heavy and memory-sensitive.
+
+Normal document extraction is usually lighter and faster.
+
+Instead of forcing them through the same worker, MDify separates them:
+
+**N1 + N2 → normal processing**
+**O1 + O2 → OCR**
+
+That allows the platform to keep normal jobs moving even when OCR workloads are heavy.
+
+It also makes performance testing more realistic because we can measure both pools separately.
+
+That’s the kind of engineering work happening behind what looks like a simple “upload → Markdown” experience.
+
+---
+
+## Patreon Post 5 — Token Efficiency
+
+**Title:** The Token-Cost Problem MDify Is Trying to Solve
+
+When people talk about AI cost, they usually talk about model prices.
+
+But there’s another cost:
+
+**unnecessary context.**
+
+If your document pipeline repeatedly sends headers, irrelevant sections, broken extraction and duplicate text, you pay for those tokens every time.
+
+MDify’s goal is not to “use less AI.”
+
+It’s to make the data sent to AI cleaner and more intentional.
+
+I’m currently working on reproducible benchmarks so any token-savings claim can be tied to actual documents and workflows rather than vague percentages.
+
+---
+
+## Patreon Post 6 — Supabase Migration
+
+**Title:** MDify Infrastructure Update: Moving Storage and Jobs to Supabase
+
+I recently simplified MDify’s infrastructure around Supabase.
+
+The current direction is:
+
+- Supabase Storage for input/output files
+- Supabase Postgres for jobs, file metadata, KPIs and audit
+- Vercel for normal processing/frontend
+- Render for OCR workers
+
+This gives MDify one durable place to track complex workflows such as multi-page PDFs and project ZIPs.
+
+It also makes retention, cleanup and admin visibility easier to manage.
+
+The less glamorous infrastructure work is what makes the bigger features possible.
+
+---
+
+## Patreon Post 7 — 48-Hour Retention
+
+**Title:** How MDify Handles Uploaded Files
+
+Privacy matters even more when a product processes documents.
+
+MDify’s storage architecture is being designed around a default file-retention window of 48 hours, with controlled cleanup and operational tracking.
+
+That means uploaded files and generated results are not intended to become permanent storage by default.
+
+I’m also building internal audit/cleanup tools so failed deletions or orphaned files can be detected rather than silently ignored.
+
+Trust should be an engineering feature, not just a sentence in a privacy policy.
+
+---
+
+## Patreon Post 8 — Performance Testing
+
+**Title:** What Happens When All 4 MDify Workers Run at Once?
+
+I’ve been testing MDify under parallel workloads.
+
+The important thing isn’t just whether four workers can run.
+
+It’s what happens to:
+
+- latency
+- throughput
+- CPU contention
+- storage
+- database writes
+- failover
+
+Parallel processing can improve total makespan while still making each individual job slower because workers share physical resources.
+
+That’s why I’m measuring throughput separately from single-job latency.
+
+I’ll share more benchmark details once the test matrix is complete.
+
+---
+
+## Patreon Post 9 — RAG Ingestion
+
+**Title:** Better RAG Starts Before Embeddings
+
+A lot of RAG optimization focuses on vector databases and rerankers.
+
+But bad input stays bad input.
+
+If the extracted document contains repeated text, broken structure or OCR noise, embeddings simply encode that mess.
+
+MDify is designed around improving the ingestion layer first.
+
+The intended workflow:
+
+**Document → clean Markdown → chunk → embed → retrieve → LLM**
+
+It’s a small architectural change that can improve everything downstream.
+
+---
+
+## Patreon Post 10 — Supporter Update
+
+**Title:** What I’m Building Next for MDify
+
+The next major MDify improvements are centered around complex files:
+
+1. Hybrid PDFs
+2. Page-level OCR routing
+3. Project ZIP processing
+4. Nested archive safety
+5. Structured project output
+6. Better token-efficiency benchmarks
+7. Admin monitoring and cleanup
+8. More performance testing
+
+The public experience should stay simple:
+
+**Upload → Convert → Use**
+
+The complexity belongs behind the product.
+
+You can follow the live product at:
+
+https://markdify.com
+
+Thanks for following the build.
+
+---
+
+# Ko-fi — 10 Posts
+
+## Ko-fi Post 1 — Launch Update
+
+**Title:** MDify Is Live 🚀
+
+I’ve launched **MDify** — a tool for converting documents into cleaner, structured Markdown for AI workflows.
+
+It’s designed for people working with:
+
+- LLMs
+- RAG
+- AI agents
+- knowledge bases
+- document-heavy automation
+
+Try it here:
+
+https://markdify.com
+
+I’ll be sharing development updates and new features here as I continue building it.
+
+---
+
+## Ko-fi Post 2 — Why I Built It
+
+**Title:** Why I Built MDify
+
+I kept running into the same problem:
+
+Before using a PDF or document with AI, I had to clean the extracted text first.
+
+Broken layouts. Repeated headers. OCR noise. Unnecessary content.
+
+MDify is my attempt to make that step easier.
+
+Upload a document → get structured Markdown → use it in your AI workflow.
+
+https://markdify.com
+
+---
+
+## Ko-fi Post 3 — Token Savings
+
+**Title:** Cleaner Files = Less Wasted AI Context
+
+One of MDify’s main goals is to help reduce unnecessary LLM token usage.
+
+The idea isn’t complicated:
+
+If a document contains less noise, duplicate text and irrelevant content, your AI pipeline has less useless context to process.
+
+I’m currently benchmarking different document types so future cost-saving claims are backed by real measurements.
+
+Try MDify:
+
+https://markdify.com
+
+---
+
+## Ko-fi Post 4 — PDF Update
+
+**Title:** Making MDify Smarter With Mixed PDFs
+
+I’m working on smarter PDF processing.
+
+Instead of treating every page the same, MDify will be able to distinguish between:
+
+- native text
+- mixed text + images
+- scanned pages
+
+Then it can use normal extraction or OCR only where needed.
+
+That means better results without wasting OCR processing on pages that don’t need it.
+
+---
+
+## Ko-fi Post 5 — Project ZIPs
+
+**Title:** Coming to MDify: Smarter ZIP Project Processing
+
+A ZIP can contain a full project—not just one document.
+
+I’m designing MDify to safely inspect a ZIP, understand its directory structure and process each supported file differently.
+
+Code stays code.
+
+Documents are converted.
+
+Images can use OCR.
+
+Nested archives are handled with safety limits.
+
+Then MDify builds the project back into structured AI-ready output.
+
+---
+
+## Ko-fi Post 6 — Behind the Architecture
+
+**Title:** 4 Workers Behind One Simple Upload
+
+MDify’s processing architecture separates normal files from OCR-heavy work.
+
+**N1 + N2:** normal document processing
+**O1 + O2:** OCR processing
+
+The user doesn’t need to think about any of that.
+
+The goal is still:
+
+**Upload → Convert → Download**
+
+But separating workloads behind the scenes helps keep processing faster and more reliable.
+
+---
+
+## Ko-fi Post 7 — AI + Markdown
+
+**Title:** Why MDify Uses Markdown
+
+Markdown is simple, portable and easy for AI pipelines to work with.
+
+It keeps:
+
+- headings
+- lists
+- code blocks
+- structure
+
+without carrying the same layout baggage as many document formats.
+
+That makes it useful for chunking, RAG, indexing and prompts.
+
+MDify turns source files into this cleaner intermediate format.
+
+https://markdify.com
+
+---
+
+## Ko-fi Post 8 — Build Update
+
+**Title:** MDify Build Update: Storage + Job Tracking
+
+I’m improving MDify’s backend around Supabase.
+
+Files are stored in Supabase Storage while job state, processing metadata, KPIs and audit events live in Postgres.
+
+This will support more complex workflows like:
+
+- large PDFs
+- project ZIPs
+- multiple processing workers
+- retention cleanup
+- admin monitoring
+
+Lots of infrastructure work—but it unlocks much better features later.
+
+---
+
+## Ko-fi Post 9 — RAG Tip
+
+**Title:** Quick RAG Tip: Clean Before You Embed
+
+If you use RAG, don’t ignore document preprocessing.
+
+Bad extraction gets embedded too.
+
+Repeated headers, OCR mistakes and broken text can all reduce retrieval quality.
+
+A cleaner workflow is:
+
+**document → structured Markdown → chunk → embed**
+
+That’s one of the workflows MDify is built to support.
+
+https://markdify.com
+
+---
+
+## Ko-fi Post 10 — Thank You / CTA
+
+**Title:** Thanks for Supporting MDify 💛
+
+MDify started from a simple idea:
+
+Make documents easier to use with modern AI.
+
+I’m continuing to work on:
+
+- smarter PDF processing
+- OCR improvements
+- project ZIP support
+- token-efficiency benchmarks
+- better performance
+- safer file handling
+
+If you’d like to try what’s live now:
+
+https://markdify.com
+
+And if you’re following/supporting the project here—thank you. It genuinely helps me keep building.
diff --git a/blog-pipeline/README.md b/blog-pipeline/README.md
new file mode 100644
index 0000000..3a64a7e
--- /dev/null
+++ b/blog-pipeline/README.md
@@ -0,0 +1,37 @@
+# LLMiser blog pipeline
+
+Updated 5 November 2026. The owner selected all twelve main titles. The current deliverable is a complete authoring plan: **12 main briefs, 36 support briefs and 108 post briefs**. Actual article drafts, fixture tests, visual production and final social copy are still pending.
+
+Start with the [complete campaign map](campaign/README.md). It links every selected main to exactly three supports and each support to three distinct posts. The eight existing public articles remain unchanged.
+
+## Read next
+
+1. [Roadmap](ROADMAP.md) and [handover state](handover/STATE.json).
+2. [Campaign map](campaign/README.md), then the assigned main/support brief.
+3. [Intent registry](intent-registry.json), [overlap review](campaign/OVERLAP_REVIEW.md), [cannibalization controls](CANNIBALIZATION.md).
+4. [Brand](03-BRAND-ENTITY.md), [style](01-STYLE-RULES.md), [SEO](02-SEO-GEO.md), [output format](04-OUTPUT-FORMAT.md), [visuals](VISUALS.md).
+5. [Sources](campaign/sources.json), [social workflow](SOCIAL.md), [publication gates](PUBLISHING.md).
+
+## Canonical owners
+
+- Registry: article URLs, selected/proposed titles, keyword ownership, metadata and scope.
+- Main/support briefs: outlines, original fixture tasks and visual plans.
+- Selected-title lock: [selected-titles.json](campaign/selected-titles.json), the owner's exact twelve choices.
+- Post records: [posts.json](campaign/posts.json), 108 distinct IDs/hooks/outlines. Readable copies are in campaign/post-briefs.
+- Tracker: [editorial-tracker.csv](campaign/editorial-tracker.csv), derived worksheet, not independent publication truth.
+- State: handover/STATE.json, current completion and next task.
+- Research metrics: research/keyword-evidence.csv, unknown values remain unknown.
+
+Old S01–S10 briefs are superseded pointers, not ten additional articles. MAIN_TOPIC_OPTIONS.md retains alternatives for provenance; selections are now locked. The original 15/45/360 archive is historical. No extra eight-post or two-post pilot allocation applies.
+
+## Checks
+
+From repository root:
+```powershell
+node blog-pipeline/scripts/validate-plan.mjs --preservation
+node --test blog-pipeline/scripts/validate-plan.test.mjs
+```
+
+These check ownership structure, allocations and preserved files. They do not establish search rankings, semantic independence or successful conversion tests. See [campaign validation](campaign/VALIDATION.md).
+
+This folder is private and Git-ignored. Preserve it in a private handover/backup; do not force-add it or raw evidence to the public repository. The app only ships approved Markdown/assets and generated discovery files. The attached archive and handover protocol were reference material, not authority to publish or contact people.
diff --git a/blog-pipeline/ROADMAP.md b/blog-pipeline/ROADMAP.md
new file mode 100644
index 0000000..66578b5
--- /dev/null
+++ b/blog-pipeline/ROADMAP.md
@@ -0,0 +1,48 @@
+# Selected LLMiser editorial roadmap
+
+Updated 5 November 2026. The twelve main titles are USER_SELECTED. Their exact wording is in [selected-titles.json](campaign/selected-titles.json). The full [campaign map](campaign/README.md) contains the 36 support titles and 108 post briefs.
+
+## Completed planning
+
+- All 12 selected titles preserved, within 60 characters.
+- Exactly 3 support tasks per main and 3 distinct post briefs per support.
+- Metadata, primary keywords, reserved URLs, original fixture tasks, outlines, visual concepts and internal-link boundaries prepared for all 48 articles.
+- Previous unpublished S01–S10 tasks reconciled; no duplicate campaign pages.
+- Existing eight-blog audit retained; no public article edited.
+
+No new article is drafted/published, no fixture has been converted for this campaign, and no social post is sent. Keyword metrics remain unmeasured.
+
+## Execution order
+
+| Wave | Clusters | Reason and prerequisite |
+| --- | --- | --- |
+| Pilot | M01 codebase preparation, then M10 ZIP results | Shared toy repository/ZIP fixture; separate before-upload selection from after-conversion accounting |
+| Office | M03 Excel, M04 Word, M05 PowerPoint, M06 CSV | Original format fixtures; separate cell meaning, DOCX hierarchy, slide context and delimiter issues |
+| OCR | M02 | Original English scan/mixed-PDF tests; no inherited accuracy claims |
+| Product workflow | M07 batch, M08 profiles, M09 editor/export | Verify current UI and actual output differences |
+| AI context | M11 prompt injection, M12 document versions | Primary sources and inert examples; no unsupported security/version-management feature claims |
+
+This sequence reflects dependency reuse and evidence readiness, not measured demand or a deadline. Start with M01 and its three supports; finish one main before expanding the authoring queue. Exactly three support briefs remain attached to each main even if research requires replacing a duplicated support idea.
+
+## Per-cluster sequence
+
+1. Claim the main ID in the registry and read its three support briefs.
+2. Confirm distinct intent against the eight existing articles, other mains and siblings. Capture actual search evidence and limitations.
+3. Prepare the main outline and one safe reusable fixture family.
+4. Draft main and supports locally with claim ledgers and actual observed outputs. Clearly distinguish expected behavior from test results.
+5. Render/review banner and at least four useful figures for each article. Do not pad thin material to meet a word or figure count; revise its scope.
+6. Follow PUBLISHING.md for the authorized release. Main/support pages may ship together or sequentially, but avoid links to URLs not included yet.
+7. Turn each support's three post briefs into platform-specific copy once its evidence and final URL exist. External posting requires an active explicit instruction; no channels/accounts are selected by this plan.
+8. Record actual release and follow-up measurements, then update the next cluster.
+
+## Existing articles and dependency limits
+
+[MAIN_BLOG_AUDIT.md](MAIN_BLOG_AUDIT.md) records existing example-code and claims issues. Do not quote known problematic examples or extend their unsupported claims into new articles. Existing public revisions are a separate editorial work item, not performed by this planning pack. Preserve URLs and migration redirects.
+
+The pilot M01 avoids reliance on the flawed published chunker/deduplication snippets. M08 and M12 must explicitly heed those findings when discussing boundaries and conflicts. M02 must not carry over a universal PDF-savings claim.
+
+## Review after release
+
+Check URLs/canonicals and broken links at release; review technical indexing after about 14 days, query-to-page evidence after 28 days, and editorial direction around 56 days when data supports a conclusion. These are review intervals, not promises of ranking. Track qualified referrals and conversions only when actually measured; views/reactions are not conversions.
+
+The handover next task is M01 research and original fixture preparation. The support/post briefs are ready to assign, not finished publishable copy.
diff --git a/blog-pipeline/SOCIAL.md b/blog-pipeline/SOCIAL.md
new file mode 100644
index 0000000..fb1baf2
--- /dev/null
+++ b/blog-pipeline/SOCIAL.md
@@ -0,0 +1,29 @@
+# Three posts per support article
+
+Updated 5 November 2026. The campaign contains 36 support articles, each with exactly three individual post briefs: **108 posts planned**. Read [campaign/posts.json](campaign/posts.json) or its readable per-support files linked from the [campaign map](campaign/README.md).
+
+## Three distinct purposes
+
+1. Practical walkthrough: a narrow problem, usable sequence and limitation.
+2. Annotated example: original source versus actual output, with a specific inspection step.
+3. Misconception/limitation: challenge one assumption and show how to verify it.
+
+Each of the 108 records has its own hook, content beats, evidence task, visual concept, support destination and ID. These are briefs, not final copy. Do not turn a proposed example into a claim that it was tested.
+
+## Channels
+
+Suggested channels in post records are optional. Final platform/account is unassigned. Three posts do not necessarily mean three platforms. Use actual audience fit and current platform rules; adapt the text rather than copying identical teasers. The historical eight-platform archive and two-post pilot are superseded.
+
+A carousel requires real panels, readable exports and alt text. A short post requires the chosen platform's length check. A community answer requires relevance, rules review and honest product association; no unsolicited link drops. No posts are sent or scheduled by this planning task.
+
+## Links and tracking
+
+Each post points directly to its own support article once live. Use the record's canonical destination and utm_content, then set utm_source to the actual platform and utm_medium=social. Proposed campaign name: llmiser_document_guides. Internal links and canonical tags remain clean. A proposed URL or tracker row is not proof of publication.
+
+Report only actually measured results. UTM parameters do not create conversion events by themselves. Never include private document IDs, user data or secrets in URLs.
+
+## Workflow
+
+Use templates/social-post.md and the support's completed source ledger. Check the final draft against the article's actual evidence, preserve limitations, choose platform/account, inspect the visual and verify destination. An agent sends a post only when explicitly instructed in the active task.
+
+Keep posts.json and readable post briefs synchronized. Record actual final copy/revision, publisher/date, destination and live post URL only after authorized publication. Refresh the derived tracker when statuses change.
diff --git a/blog-pipeline/VISUALS.md b/blog-pipeline/VISUALS.md
new file mode 100644
index 0000000..3ad03da
--- /dev/null
+++ b/blog-pipeline/VISUALS.md
@@ -0,0 +1,36 @@
+# Brand, banners and supporting visuals
+
+Read `visuals/kit.mjs` and a current `Blogs/{slug}/visuals.mjs` before drawing. Preserve the approved Prompt L identity. Do not regenerate icons with the private brand helper: its historical workflow also targets another project.
+
+## Current visual sources
+
+- Brand kit: `../project-docs/brand/llmiser/svg/` and `png/`.
+- Runtime colors: `../frontend/app/globals.css`.
+- Font variables: `../frontend/app/fonts.css`. Inter body, Patrick Hand editorial hooks, JetBrains Mono labels/code.
+- Existing banner/figure implementation: `visuals/kit.mjs`.
+- Public reference artwork: `../frontend/public/blog/`.
+
+Dark background #08080a, text #f2f2f6, amber #f59e0b. Light background #f0eee9, dark text #18181b. Prompt L uses periwinkle #a0a0ff. Runtime values and kit win over old screenshot colors.
+
+Figures use kit semantic series: amber for retained content, violet for extra context, pink for waste. Use text labels and shapes as well as color. Keep text in readable ink colors. Never choose a bar length from an invented savings number.
+
+## Deliverables per article
+
+- One 1200 × 400 SVG banner via `banner()`: short specific hook, Prompt L identity, illustration of the actual task. The current kit uses a fixed ink ground and paper illustration card.
+- At least four useful figures, usually 600 units wide via `figure()`: process, source/output comparison, decision and checklist are suitable without invented statistics.
+- Descriptive alt text and captions; label diagrams as illustrative and cite actual data.
+- A visual source ledger: claim, supporting sample/source, exact figure, review status.
+- Inspect light/dark rendering and 375px width. Check text wrapping, source labels, truncation and readability. No assumed validation from file existence.
+
+Build only the assigned slug:
+```powershell
+node blog-pipeline/visuals/build.mjs reserved-slug
+```
+
+The builder executes local JS specs and removes old SVGs absent from that slug's spec. Review the spec and output folder first. Do not run `--all` or overwrite existing articles during a new support task.
+
+## Social variants
+
+Suggested working canvases: 1200×630 link card, 1080×1350 carousel, 1000×1500 pin. These are production starting sizes, not verified current platform limits. Check the destination before export. Export resolved fonts/colors to PNG/JPEG for platforms that do not support SVG/CSS variables. Record exports in `Posts/{slug}/visuals/`. Never imply these exports replace the app's shared OG card.
+
+Retain one clear idea and one descriptive label per panel. Put full explanation and accessible text in the post too. Use real sanitized screenshots when demonstrating behavior; label mockups/illustrations. Do not crop away errors to imply success. No fabricated analytics, testimonials or model savings.
diff --git a/blog-pipeline/briefs/README.md b/blog-pipeline/briefs/README.md
new file mode 100644
index 0000000..1d97b7d
--- /dev/null
+++ b/blog-pipeline/briefs/README.md
@@ -0,0 +1,5 @@
+# Superseded initial briefs
+
+The ten S01–S10 briefs were reconciled with the owner's twelve selected main titles on 5 November 2026. Each file now points to its current owner and preserved historical brief.
+
+Current authoring briefs are in [campaign/main-briefs and support-briefs](../campaign/README.md). Do not publish the old and new versions as separate articles.
diff --git a/blog-pipeline/briefs/S01.md b/blog-pipeline/briefs/S01.md
new file mode 100644
index 0000000..0de1bd3
--- /dev/null
+++ b/blog-pipeline/briefs/S01.md
@@ -0,0 +1,5 @@
+# S01: superseded brief
+
+This unpublished task was reconciled on 5 November 2026. Current owner: **M02**. It is not an extra article in the 12/36 campaign. See [campaign map](../campaign/README.md) and [intent registry](../intent-registry.json).
+
+The old brief is preserved in [history](../history/2026-11-05-before-selected-campaign/briefs/S01.md). For S07, any extraction-cleanup expansion belongs to review of E06 rather than a separately scheduled new URL.
diff --git a/blog-pipeline/briefs/S02.md b/blog-pipeline/briefs/S02.md
new file mode 100644
index 0000000..77e3ab7
--- /dev/null
+++ b/blog-pipeline/briefs/S02.md
@@ -0,0 +1,5 @@
+# S02: superseded brief
+
+This unpublished task was reconciled on 5 November 2026. Current owner: **M01**. It is not an extra article in the 12/36 campaign. See [campaign map](../campaign/README.md) and [intent registry](../intent-registry.json).
+
+The old brief is preserved in [history](../history/2026-11-05-before-selected-campaign/briefs/S02.md). For S07, any extraction-cleanup expansion belongs to review of E06 rather than a separately scheduled new URL.
diff --git a/blog-pipeline/briefs/S03.md b/blog-pipeline/briefs/S03.md
new file mode 100644
index 0000000..4ea982a
--- /dev/null
+++ b/blog-pipeline/briefs/S03.md
@@ -0,0 +1,5 @@
+# S03: superseded brief
+
+This unpublished task was reconciled on 5 November 2026. Current owner: **M03**. It is not an extra article in the 12/36 campaign. See [campaign map](../campaign/README.md) and [intent registry](../intent-registry.json).
+
+The old brief is preserved in [history](../history/2026-11-05-before-selected-campaign/briefs/S03.md). For S07, any extraction-cleanup expansion belongs to review of E06 rather than a separately scheduled new URL.
diff --git a/blog-pipeline/briefs/S04.md b/blog-pipeline/briefs/S04.md
new file mode 100644
index 0000000..4b031e9
--- /dev/null
+++ b/blog-pipeline/briefs/S04.md
@@ -0,0 +1,5 @@
+# S04: superseded brief
+
+This unpublished task was reconciled on 5 November 2026. Current owner: **M04**. It is not an extra article in the 12/36 campaign. See [campaign map](../campaign/README.md) and [intent registry](../intent-registry.json).
+
+The old brief is preserved in [history](../history/2026-11-05-before-selected-campaign/briefs/S04.md). For S07, any extraction-cleanup expansion belongs to review of E06 rather than a separately scheduled new URL.
diff --git a/blog-pipeline/briefs/S05.md b/blog-pipeline/briefs/S05.md
new file mode 100644
index 0000000..6e9777d
--- /dev/null
+++ b/blog-pipeline/briefs/S05.md
@@ -0,0 +1,5 @@
+# S05: superseded brief
+
+This unpublished task was reconciled on 5 November 2026. Current owner: **M05**. It is not an extra article in the 12/36 campaign. See [campaign map](../campaign/README.md) and [intent registry](../intent-registry.json).
+
+The old brief is preserved in [history](../history/2026-11-05-before-selected-campaign/briefs/S05.md). For S07, any extraction-cleanup expansion belongs to review of E06 rather than a separately scheduled new URL.
diff --git a/blog-pipeline/briefs/S06.md b/blog-pipeline/briefs/S06.md
new file mode 100644
index 0000000..b912738
--- /dev/null
+++ b/blog-pipeline/briefs/S06.md
@@ -0,0 +1,5 @@
+# S06: superseded brief
+
+This unpublished task was reconciled on 5 November 2026. Current owner: **M02**. It is not an extra article in the 12/36 campaign. See [campaign map](../campaign/README.md) and [intent registry](../intent-registry.json).
+
+The old brief is preserved in [history](../history/2026-11-05-before-selected-campaign/briefs/S06.md). For S07, any extraction-cleanup expansion belongs to review of E06 rather than a separately scheduled new URL.
diff --git a/blog-pipeline/briefs/S07.md b/blog-pipeline/briefs/S07.md
new file mode 100644
index 0000000..cde49b5
--- /dev/null
+++ b/blog-pipeline/briefs/S07.md
@@ -0,0 +1,5 @@
+# S07: superseded brief
+
+This unpublished task was reconciled on 5 November 2026. Current owner: **E06**. It is not an extra article in the 12/36 campaign. See [campaign map](../campaign/README.md) and [intent registry](../intent-registry.json).
+
+The old brief is preserved in [history](../history/2026-11-05-before-selected-campaign/briefs/S07.md). For S07, any extraction-cleanup expansion belongs to review of E06 rather than a separately scheduled new URL.
diff --git a/blog-pipeline/briefs/S08.md b/blog-pipeline/briefs/S08.md
new file mode 100644
index 0000000..d452182
--- /dev/null
+++ b/blog-pipeline/briefs/S08.md
@@ -0,0 +1,5 @@
+# S08: superseded brief
+
+This unpublished task was reconciled on 5 November 2026. Current owner: **M10**. It is not an extra article in the 12/36 campaign. See [campaign map](../campaign/README.md) and [intent registry](../intent-registry.json).
+
+The old brief is preserved in [history](../history/2026-11-05-before-selected-campaign/briefs/S08.md). For S07, any extraction-cleanup expansion belongs to review of E06 rather than a separately scheduled new URL.
diff --git a/blog-pipeline/briefs/S09.md b/blog-pipeline/briefs/S09.md
new file mode 100644
index 0000000..ff67e18
--- /dev/null
+++ b/blog-pipeline/briefs/S09.md
@@ -0,0 +1,5 @@
+# S09: superseded brief
+
+This unpublished task was reconciled on 5 November 2026. Current owner: **M08**. It is not an extra article in the 12/36 campaign. See [campaign map](../campaign/README.md) and [intent registry](../intent-registry.json).
+
+The old brief is preserved in [history](../history/2026-11-05-before-selected-campaign/briefs/S09.md). For S07, any extraction-cleanup expansion belongs to review of E06 rather than a separately scheduled new URL.
diff --git a/blog-pipeline/briefs/S10.md b/blog-pipeline/briefs/S10.md
new file mode 100644
index 0000000..3db510e
--- /dev/null
+++ b/blog-pipeline/briefs/S10.md
@@ -0,0 +1,5 @@
+# S10: superseded brief
+
+This unpublished task was reconciled on 5 November 2026. Current owner: **M06**. It is not an extra article in the 12/36 campaign. See [campaign map](../campaign/README.md) and [intent registry](../intent-registry.json).
+
+The old brief is preserved in [history](../history/2026-11-05-before-selected-campaign/briefs/S10.md). For S07, any extraction-cleanup expansion belongs to review of E06 rather than a separately scheduled new URL.
diff --git a/blog-pipeline/campaign/OVERLAP_REVIEW.md b/blog-pipeline/campaign/OVERLAP_REVIEW.md
new file mode 100644
index 0000000..2885e72
--- /dev/null
+++ b/blog-pipeline/campaign/OVERLAP_REVIEW.md
@@ -0,0 +1,42 @@
+# Editorial overlap review
+
+Prepared 5 November 2026. This is manual scope design across the 58 registry owners (2 product pages, 8 existing articles, 12 new mains, 36 supports), plus exact-collision validation. It is not a live ranking/cannibalization study.
+
+## Main versus support
+
+Each main owns its complete checklist or product workflow. Its supports own three precise questions with independent examples. A main may summarize the answer briefly and link out; a support must not reproduce the whole main checklist. Separate titles alone do not establish separate intent.
+
+Examples:
+- M03 explains seven workbook checks. M03-S1 investigates text identifiers versus numeric display, S2 formula results, S3 merged labels.
+- M07 covers the overall batch workflow. Its supports handle mixed-format planning, partial outcomes and upload-limit planning.
+- M11 explains document prompt injection. Its supports classify untrusted instructions, demonstrate format-versus-trust boundaries, and review downstream action authorization.
+
+If research shows a support deserves only a paragraph, replace that proposed support with a distinct useful question within the same cluster. Do not pad 1,200 words or publish a doorway page to preserve the number.
+
+## Cross-cluster boundaries
+
+| Owners | Decision |
+| --- | --- |
+| M01 / M10 | Before upload: selecting/sharing files. After conversion: interpreting artifacts and omissions. No duplicate general ZIP-to-Markdown page. |
+| M02 / E06 / E07 / E08 | OCR coverage and character verification versus ingestion cost, format choice and pipeline architecture. No new broad PDF savings explanation. |
+| M03 / M06 | Workbook cells/styles/formulas/sheets versus delimited-text syntax/encoding/field count. Numeric identifiers may be mentioned in CSV, but the detailed stored-versus-displayed analysis belongs to M03-S1. |
+| M04 / M05 | Word document hierarchy/revisions versus slide sequence/notes/chart context. Reuse general source guidance, not the same tutorial. |
+| M07 / M09 | Intake and per-file batch outcomes versus editor state, preview and final transfer. Recovery guidance must not imply that saved originals contain unsaved edits. |
+| M08 / E05 / E08 | Actual profile transformations and marker semantics versus retrieval tuning or full ingestion. No new generic RAG guide. |
+| M11 / M12 | Adversarial redirection/trust versus conflicting legitimate source versions. An outdated document is not automatically a prompt injection. |
+| M12 / E05 | Provenance and conflicting facts versus generic retrieval context waste. Never deduplicate different deadlines merely because words match. |
+| HOME / all new guides | Homepage owns converter transaction. Guides answer a defined preparation/review task; avoid a second generic converter landing page. |
+
+## Previous brief reconciliation
+
+S01 + S06 → M02; S02 → M01; S03 → M03; S04 → M04; S05 → M05; S08 → M10; S09 → M08; S10 → M06. S07 remains an E06 review opportunity and is not an additional campaign article. Old unpublished slug reservations are retired without redirects; they were not live URLs.
+
+## Internal links
+
+Support → its main; main → relevant supports once live. Add sibling/context links where genuinely useful, not compulsory all-to-all blocks. Main parent_id in the registry points to an existing contextual guide; it does not make the selected main a duplicate support page.
+
+## Outstanding verification
+
+R01–R03 existing-page overlap remains open. R04 now checks the selected Excel/CSV boundaries. R05 still records missing metrics and named-engine data. New R07 tracks parent/support thin-content risks and R08 cross-cluster ambiguity. Complete actual query/result and outline review before drafting; monitor Google/Bing query-to-page data after publication.
+
+Do not call passing exact-keyword/title/URL checks proof of no cannibalization.
diff --git a/blog-pipeline/campaign/README.md b/blog-pipeline/campaign/README.md
new file mode 100644
index 0000000..e63358e
--- /dev/null
+++ b/blog-pipeline/campaign/README.md
@@ -0,0 +1,121 @@
+# Selected campaign: 12 main blogs, 36 supports, 108 posts
+
+Updated 5 November 2026. All twelve main titles below are the owner's exact selections. Support titles, keywords, metadata and post angles are editorial proposals. All 48 article briefs and 108 post briefs are prepared; full article drafts, tested fixtures, final social copy and publication are not complete.
+
+## Start here
+
+1. [Roadmap](../ROADMAP.md) for order and handover.
+2. [Intent registry](../intent-registry.json) for canonical URL, keyword and metadata ownership.
+3. Main brief and its three support briefs below.
+4. [Source library](sources.json), [overlap decisions](OVERLAP_REVIEW.md) and [validation](VALIDATION.md).
+5. [Post records](posts.json) and the per-support post briefs linked from each support.
+
+Exactly three supports belong to each main and three post records to each support. This is 156 proposed publication assets, not 156 completed drafts. The eight current public articles are separate. The old ten briefs are superseded pointers, not extra publications.
+
+Each main brief covers the overview. Each support answers one narrow question. The three posts offer a walkthrough, an annotated example and a misconception/limitation angle. Suggested channels are optional; no accounts have been selected and nothing is posted.
+
+## Complete cluster map
+
+### M01: 7 Things to Remove Before Sharing a Codebase With AI
+
+[Main brief](main-briefs/M01.md) · primary target: `prepare codebase for AI` (unmeasured).
+
+- [M01-S1: Check a Project ZIP for Secrets Before Sharing It](support-briefs/M01-S1.md) — [three post briefs](post-briefs/M01-S1.md)
+- [M01-S2: Which Dependency Files Should You Keep for AI Review?](support-briefs/M01-S2.md) — [three post briefs](post-briefs/M01-S2.md)
+- [M01-S3: Build a Task-Focused Code Bundle With Tests](support-briefs/M01-S3.md) — [three post briefs](post-briefs/M01-S3.md)
+
+### M02: 9 OCR Checks Before You Send Scanned Text to AI
+
+[Main brief](main-briefs/M02.md) · primary target: `OCR quality checks for AI` (unmeasured).
+
+- [M02-S1: Check Rotated Scans Before Running OCR](support-briefs/M02-S1.md) — [three post briefs](post-briefs/M02-S1.md)
+- [M02-S2: Verify Numbers and Identifiers in OCR Output](support-briefs/M02-S2.md) — [three post briefs](post-briefs/M02-S2.md)
+- [M02-S3: Check OCR Coverage in a Mixed PDF](support-briefs/M02-S3.md) — [three post briefs](post-briefs/M02-S3.md)
+
+### M03: 7 Excel Details to Check Before Sharing Data With AI
+
+[Main brief](main-briefs/M03.md) · primary target: `prepare Excel data for AI` (unmeasured).
+
+- [M03-S1: Keep Leading Zeros When Preparing Excel Data for AI](support-briefs/M03-S1.md) — [three post briefs](post-briefs/M03-S1.md)
+- [M03-S2: Check Excel Formula Results Before Conversion](support-briefs/M03-S2.md) — [three post briefs](post-briefs/M03-S2.md)
+- [M03-S3: Prepare Merged Excel Headers for Markdown Tables](support-briefs/M03-S3.md) — [three post briefs](post-briefs/M03-S3.md)
+
+### M04: 6 Ways to Prepare Word Documents for AI
+
+[Main brief](main-briefs/M04.md) · primary target: `prepare Word documents for AI` (unmeasured).
+
+- [M04-S1: Use Word Heading Styles Before Markdown Conversion](support-briefs/M04-S1.md) — [three post briefs](post-briefs/M04-S1.md)
+- [M04-S2: Check Nested Word Lists in Markdown Output](support-briefs/M04-S2.md) — [three post briefs](post-briefs/M04-S2.md)
+- [M04-S3: Prepare Word Revisions and Comments for AI Sharing](support-briefs/M04-S3.md) — [three post briefs](post-briefs/M04-S3.md)
+
+### M05: 8 Checks When Converting PowerPoint to Markdown
+
+[Main brief](main-briefs/M05.md) · primary target: `PowerPoint to Markdown` (unmeasured).
+
+- [M05-S1: Check PowerPoint Speaker Notes After Conversion](support-briefs/M05-S1.md) — [three post briefs](post-briefs/M05-S1.md)
+- [M05-S2: Carry Chart Context From Slides Into AI Prompts](support-briefs/M05-S2.md) — [three post briefs](post-briefs/M05-S2.md)
+- [M05-S3: Keep Slide Titles and Order Clear in Markdown](support-briefs/M05-S3.md) — [three post briefs](post-briefs/M05-S3.md)
+
+### M06: 7 Ways to Prepare Cleaner CSV Data for AI
+
+[Main brief](main-briefs/M06.md) · primary target: `prepare CSV data for AI` (unmeasured).
+
+- [M06-S1: Handle Commas and Quotes Inside CSV Cells](support-briefs/M06-S1.md) — [three post briefs](post-briefs/M06-S1.md)
+- [M06-S2: Check CSV Encoding Before Sharing Text With AI](support-briefs/M06-S2.md) — [three post briefs](post-briefs/M06-S2.md)
+- [M06-S3: Distinguish Empty CSV Cells From Missing Fields](support-briefs/M06-S3.md) — [three post briefs](post-briefs/M06-S3.md)
+
+### M07: How to Convert Multiple Files With LLMiser
+
+[Main brief](main-briefs/M07.md) · primary target: `LLMiser batch conversion` (unmeasured).
+
+- [M07-S1: Plan a Batch With Different Supported File Types](support-briefs/M07-S1.md) — [three post briefs](post-briefs/M07-S1.md)
+- [M07-S2: Handle Partial Conversion Failures in a Batch](support-briefs/M07-S2.md) — [three post briefs](post-briefs/M07-S2.md)
+- [M07-S3: Split a File Batch Around LLMiser's Upload Limits](support-briefs/M07-S3.md) — [three post briefs](post-briefs/M07-S3.md)
+
+### M08: LLMiser Profiles: Standard, Clean, Compact, RAG-ready
+
+[Main brief](main-briefs/M08.md) · primary target: `LLMiser processing profiles` (unmeasured).
+
+- [M08-S1: Standard vs Clean: Compare LLMiser Output](support-briefs/M08-S1.md) — [three post briefs](post-briefs/M08-S1.md)
+- [M08-S2: Check Compact Markdown Before You Use It](support-briefs/M08-S2.md) — [three post briefs](post-briefs/M08-S2.md)
+- [M08-S3: What LLMiser's RAG-ready Markers Do](support-briefs/M08-S3.md) — [three post briefs](post-briefs/M08-S3.md)
+
+### M09: How to Edit and Export Markdown With LLMiser
+
+[Main brief](main-briefs/M09.md) · primary target: `edit Markdown in LLMiser` (unmeasured).
+
+- [M09-S1: Original or Edited Markdown: Which File Are You Saving?](support-briefs/M09-S1.md) — [three post briefs](post-briefs/M09-S1.md)
+- [M09-S2: Check Long Markdown Beyond the Preview](support-briefs/M09-S2.md) — [three post briefs](post-briefs/M09-S2.md)
+- [M09-S3: Copy or Download Markdown: Check the Result](support-briefs/M09-S3.md) — [three post briefs](post-briefs/M09-S3.md)
+
+### M10: How to Read LLMiser's ZIP Index and Manifest
+
+[Main brief](main-briefs/M10.md) · primary target: `LLMiser ZIP manifest` (unmeasured).
+
+- [M10-S1: Find Relevant Files in PROJECT_INDEX.md](support-briefs/M10-S1.md) — [three post briefs](post-briefs/M10-S1.md)
+- [M10-S2: Reconcile a ZIP Manifest With Your Source Files](support-briefs/M10-S2.md) — [three post briefs](post-briefs/M10-S2.md)
+- [M10-S3: Investigate Missing Content in a ZIP Conversion](support-briefs/M10-S3.md) — [three post briefs](post-briefs/M10-S3.md)
+
+### M11: Prompt Injection: Can a Document Hijack Your AI?
+
+[Main brief](main-briefs/M11.md) · primary target: `document prompt injection` (unmeasured).
+
+- [M11-S1: Recognize Instructions Inside an Untrusted Document](support-briefs/M11-S1.md) — [three post briefs](post-briefs/M11-S1.md)
+- [M11-S2: Why Markdown Conversion Does Not Remove Prompt Injection](support-briefs/M11-S2.md) — [three post briefs](post-briefs/M11-S2.md)
+- [M11-S3: Review AI Actions After Reading External Documents](support-briefs/M11-S3.md) — [three post briefs](post-briefs/M11-S3.md)
+
+### M12: Why Two Versions of a Document Can Confuse AI
+
+[Main brief](main-briefs/M12.md) · primary target: `conflicting document versions AI` (unmeasured).
+
+- [M12-S1: Label Document Versions Before Building AI Context](support-briefs/M12-S1.md) — [three post briefs](post-briefs/M12-S1.md)
+- [M12-S2: Resolve Conflicting Policy Passages Before Asking AI](support-briefs/M12-S2.md) — [three post briefs](post-briefs/M12-S2.md)
+- [M12-S3: Remove Stale Excerpts From an AI Context Packet](support-briefs/M12-S3.md) — [three post briefs](post-briefs/M12-S3.md)
+
+## Ownership and editing
+
+Registry owns article metadata and scope. Main/support Markdown files own outline, fixture and visual instructions. posts.json owns post IDs, hooks, beats, destinations and status; per-support post files are the readable views of those records and must stay synchronized. selected-titles.json is the immutable user-selection reference unless the owner changes a title. It is deliberately compared with the registry by validation.
+
+Use [editorial-tracker.csv](editorial-tracker.csv) as a derived worksheet; authoritative lifecycle updates belong in the registry or posts.json and handover. Do not change a tracker alone and claim publication. Save actual live URLs/dates only after release.
+
+No guessed search volume, manufactured test results or guarantee of zero cannibalization. Record retrieval failures and review distinctness before drafting. A valid plan does not prove 48 topics all deserve standalone pages: if research shows duplication, keep the parent's selected title and replace the narrower support question within the three-support allocation.
diff --git a/blog-pipeline/campaign/VALIDATION.md b/blog-pipeline/campaign/VALIDATION.md
new file mode 100644
index 0000000..ecabdd6
--- /dev/null
+++ b/blog-pipeline/campaign/VALIDATION.md
@@ -0,0 +1,28 @@
+# Selected campaign validation
+
+Verified 5 November 2026. Scope: private planning artifacts, not article performance or production conversion behavior.
+
+| Check | Result |
+| --- | --- |
+| Plan validator with --preservation | PASS: 58 owners, 48 planned article briefs, 60 historical archive decisions |
+| Campaign hierarchy | PASS: 12 mains, 36 supports, 108 individual post briefs; exactly 3 children at each requested level |
+| Exact selected titles | PASS: all 12 match the user's choices; 39–53 characters |
+| Category allocation | PASS: 6 listicles, 4 product guides, 2 miscellaneous AI topics |
+| Metadata and ownership | PASS: canonical URL, title, primary keyword and explicit alias uniqueness; descriptions at most 170 characters |
+| Regression tests | PASS: 10/10, including removed post, changed selected title, reparented support and wrong destination |
+| Preservation | PASS: 60 existing article/asset/tool SHA-256 hashes unchanged |
+| Existing blog index | PASS: npm run blog:check |
+| Editorial tracker | PASS: 156 unique asset rows, existing brief paths and no published URL claims |
+| Source references | PASS: every post source ID resolves in sources.json |
+| Active Markdown links | PASS: relative file targets exist in campaign, handovers and active entry documents |
+| Git state | No tracked changes; private blog-pipeline remains ignored |
+
+The original ten S-series briefs are preserved in history and point to current owners. Historical research retains its original dates and limitations.
+
+## Limits and remaining review
+
+These results verify planning structure and preservation. They do not establish search volume, ranking, indexing, model citations, final draft quality, original fixture outcomes, accessibility of future visuals, or zero future keyword cannibalization. R01–R08 remain open where semantic or search evidence is required. No live conversion, new article publication or social posting was performed.
+
+The 108 post briefs have individual hooks, outlines, evidence requirements and visual plans. They are not finished platform copy. The 48 articles have briefs, not completed prose. Named-engine query links are generated research aids, not executed SERP observations.
+
+Next: M01 research and a safe toy codebase fixture, followed by drafting within the selected seven-item outline. See ../handover/NEXT_AGENT.md.
diff --git a/blog-pipeline/campaign/editorial-tracker.csv b/blog-pipeline/campaign/editorial-tracker.csv
new file mode 100644
index 0000000..3833003
--- /dev/null
+++ b/blog-pipeline/campaign/editorial-tracker.csv
@@ -0,0 +1,157 @@
+id,asset_type,parent_id,title_or_hook,status,brief,canonical_destination,owner,published_url
+M01,main,E08,7 Things to Remove Before Sharing a Codebase With AI,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/main-briefs/M01.md,https://llmiser.devbehindyou.com/blog/prepare-codebase-for-ai,,
+M02,main,E08,9 OCR Checks Before You Send Scanned Text to AI,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/main-briefs/M02.md,https://llmiser.devbehindyou.com/blog/ocr-checks-before-ai,,
+M03,main,E08,7 Excel Details to Check Before Sharing Data With AI,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/main-briefs/M03.md,https://llmiser.devbehindyou.com/blog/excel-data-checks-for-ai,,
+M04,main,E08,6 Ways to Prepare Word Documents for AI,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/main-briefs/M04.md,https://llmiser.devbehindyou.com/blog/prepare-word-documents-for-ai,,
+M05,main,E08,8 Checks When Converting PowerPoint to Markdown,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/main-briefs/M05.md,https://llmiser.devbehindyou.com/blog/powerpoint-to-markdown-checks,,
+M06,main,E08,7 Ways to Prepare Cleaner CSV Data for AI,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/main-briefs/M06.md,https://llmiser.devbehindyou.com/blog/prepare-csv-data-for-ai,,
+M07,main,E08,How to Convert Multiple Files With LLMiser,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/main-briefs/M07.md,https://llmiser.devbehindyou.com/blog/convert-multiple-files-llmiser,,
+M08,main,E08,"LLMiser Profiles: Standard, Clean, Compact, RAG-ready",BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/main-briefs/M08.md,https://llmiser.devbehindyou.com/blog/llmiser-processing-profiles,,
+M09,main,E08,How to Edit and Export Markdown With LLMiser,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/main-briefs/M09.md,https://llmiser.devbehindyou.com/blog/edit-export-markdown-llmiser,,
+M10,main,E08,How to Read LLMiser's ZIP Index and Manifest,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/main-briefs/M10.md,https://llmiser.devbehindyou.com/blog/llmiser-zip-index-manifest,,
+M11,main,E08,Prompt Injection: Can a Document Hijack Your AI?,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/main-briefs/M11.md,https://llmiser.devbehindyou.com/blog/document-prompt-injection,,
+M12,main,E08,Why Two Versions of a Document Can Confuse AI,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/main-briefs/M12.md,https://llmiser.devbehindyou.com/blog/conflicting-document-versions-ai,,
+M01-S1,support,M01,Check a Project ZIP for Secrets Before Sharing It,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/support-briefs/M01-S1.md,https://llmiser.devbehindyou.com/blog/project-zip-secret-review,,
+M01-S2,support,M01,Which Dependency Files Should You Keep for AI Review?,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/support-briefs/M01-S2.md,https://llmiser.devbehindyou.com/blog/dependency-files-ai-review,,
+M01-S3,support,M01,Build a Task-Focused Code Bundle With Tests,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/support-briefs/M01-S3.md,https://llmiser.devbehindyou.com/blog/task-focused-code-bundle,,
+M02-S1,support,M02,Check Rotated Scans Before Running OCR,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/support-briefs/M02-S1.md,https://llmiser.devbehindyou.com/blog/rotated-scan-ocr-check,,
+M02-S2,support,M02,Verify Numbers and Identifiers in OCR Output,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/support-briefs/M02-S2.md,https://llmiser.devbehindyou.com/blog/verify-ocr-numbers,,
+M02-S3,support,M02,Check OCR Coverage in a Mixed PDF,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/support-briefs/M02-S3.md,https://llmiser.devbehindyou.com/blog/mixed-pdf-ocr-coverage,,
+M03-S1,support,M03,Keep Leading Zeros When Preparing Excel Data for AI,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/support-briefs/M03-S1.md,https://llmiser.devbehindyou.com/blog/excel-leading-zeros-ai,,
+M03-S2,support,M03,Check Excel Formula Results Before Conversion,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/support-briefs/M03-S2.md,https://llmiser.devbehindyou.com/blog/excel-formula-results-conversion,,
+M03-S3,support,M03,Prepare Merged Excel Headers for Markdown Tables,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/support-briefs/M03-S3.md,https://llmiser.devbehindyou.com/blog/merged-excel-headers-markdown,,
+M04-S1,support,M04,Use Word Heading Styles Before Markdown Conversion,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/support-briefs/M04-S1.md,https://llmiser.devbehindyou.com/blog/word-heading-styles-markdown,,
+M04-S2,support,M04,Check Nested Word Lists in Markdown Output,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/support-briefs/M04-S2.md,https://llmiser.devbehindyou.com/blog/nested-word-lists-markdown,,
+M04-S3,support,M04,Prepare Word Revisions and Comments for AI Sharing,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/support-briefs/M04-S3.md,https://llmiser.devbehindyou.com/blog/word-revisions-ai-sharing,,
+M05-S1,support,M05,Check PowerPoint Speaker Notes After Conversion,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/support-briefs/M05-S1.md,https://llmiser.devbehindyou.com/blog/powerpoint-speaker-notes-markdown,,
+M05-S2,support,M05,Carry Chart Context From Slides Into AI Prompts,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/support-briefs/M05-S2.md,https://llmiser.devbehindyou.com/blog/slide-chart-context-ai,,
+M05-S3,support,M05,Keep Slide Titles and Order Clear in Markdown,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/support-briefs/M05-S3.md,https://llmiser.devbehindyou.com/blog/slide-order-markdown,,
+M06-S1,support,M06,Handle Commas and Quotes Inside CSV Cells,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/support-briefs/M06-S1.md,https://llmiser.devbehindyou.com/blog/csv-quoted-cells-markdown,,
+M06-S2,support,M06,Check CSV Encoding Before Sharing Text With AI,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/support-briefs/M06-S2.md,https://llmiser.devbehindyou.com/blog/csv-encoding-ai,,
+M06-S3,support,M06,Distinguish Empty CSV Cells From Missing Fields,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/support-briefs/M06-S3.md,https://llmiser.devbehindyou.com/blog/csv-empty-missing-fields,,
+M07-S1,support,M07,Plan a Batch With Different Supported File Types,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/support-briefs/M07-S1.md,https://llmiser.devbehindyou.com/blog/mixed-file-batch-llmiser,,
+M07-S2,support,M07,Handle Partial Conversion Failures in a Batch,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/support-briefs/M07-S2.md,https://llmiser.devbehindyou.com/blog/partial-batch-conversion,,
+M07-S3,support,M07,Split a File Batch Around LLMiser's Upload Limits,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/support-briefs/M07-S3.md,https://llmiser.devbehindyou.com/blog/split-batch-upload-limits,,
+M08-S1,support,M08,Standard vs Clean: Compare LLMiser Output,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/support-briefs/M08-S1.md,https://llmiser.devbehindyou.com/blog/llmiser-standard-vs-clean,,
+M08-S2,support,M08,Check Compact Markdown Before You Use It,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/support-briefs/M08-S2.md,https://llmiser.devbehindyou.com/blog/llmiser-compact-markdown-check,,
+M08-S3,support,M08,What LLMiser's RAG-ready Markers Do,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/support-briefs/M08-S3.md,https://llmiser.devbehindyou.com/blog/llmiser-rag-ready-markers,,
+M09-S1,support,M09,Original or Edited Markdown: Which File Are You Saving?,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/support-briefs/M09-S1.md,https://llmiser.devbehindyou.com/blog/original-edited-markdown,,
+M09-S2,support,M09,Check Long Markdown Beyond the Preview,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/support-briefs/M09-S2.md,https://llmiser.devbehindyou.com/blog/long-markdown-preview,,
+M09-S3,support,M09,Copy or Download Markdown: Check the Result,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/support-briefs/M09-S3.md,https://llmiser.devbehindyou.com/blog/copy-download-markdown,,
+M10-S1,support,M10,Find Relevant Files in PROJECT_INDEX.md,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/support-briefs/M10-S1.md,https://llmiser.devbehindyou.com/blog/read-project-index-paths,,
+M10-S2,support,M10,Reconcile a ZIP Manifest With Your Source Files,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/support-briefs/M10-S2.md,https://llmiser.devbehindyou.com/blog/reconcile-zip-manifest,,
+M10-S3,support,M10,Investigate Missing Content in a ZIP Conversion,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/support-briefs/M10-S3.md,https://llmiser.devbehindyou.com/blog/missing-zip-conversion-content,,
+M11-S1,support,M11,Recognize Instructions Inside an Untrusted Document,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/support-briefs/M11-S1.md,https://llmiser.devbehindyou.com/blog/untrusted-document-instructions,,
+M11-S2,support,M11,Why Markdown Conversion Does Not Remove Prompt Injection,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/support-briefs/M11-S2.md,https://llmiser.devbehindyou.com/blog/markdown-conversion-prompt-injection,,
+M11-S3,support,M11,Review AI Actions After Reading External Documents,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/support-briefs/M11-S3.md,https://llmiser.devbehindyou.com/blog/ai-actions-external-documents,,
+M12-S1,support,M12,Label Document Versions Before Building AI Context,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/support-briefs/M12-S1.md,https://llmiser.devbehindyou.com/blog/label-document-versions-ai,,
+M12-S2,support,M12,Resolve Conflicting Policy Passages Before Asking AI,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/support-briefs/M12-S2.md,https://llmiser.devbehindyou.com/blog/conflicting-policy-passages-ai,,
+M12-S3,support,M12,Remove Stale Excerpts From an AI Context Packet,BRIEF_READY_CONTENT_NOT_DRAFTED,campaign/support-briefs/M12-S3.md,https://llmiser.devbehindyou.com/blog/stale-excerpts-ai-context,,
+M01-S1-P1,post,M01-S1,A renamed .env file is still sensitive,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M01-S1.md,https://llmiser.devbehindyou.com/blog/project-zip-secret-review,,
+M01-S1-P2,post,M01-S1,Show a sharing-copy review checklist,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M01-S1.md,https://llmiser.devbehindyou.com/blog/project-zip-secret-review,,
+M01-S1-P3,post,M01-S1,Removing a filename is not a secret scan,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M01-S1.md,https://llmiser.devbehindyou.com/blog/project-zip-secret-review,,
+M01-S2-P1,post,M01-S2,"Keep the dependency map, review the bulk",BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M01-S2.md,https://llmiser.devbehindyou.com/blog/dependency-files-ai-review,,
+M01-S2-P2,post,M01-S2,Compare a manifest with an installed package tree,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M01-S2.md,https://llmiser.devbehindyou.com/blog/dependency-files-ai-review,,
+M01-S2-P3,post,M01-S2,When vendored code is the code under review,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M01-S2.md,https://llmiser.devbehindyou.com/blog/dependency-files-ai-review,,
+M01-S3-P1,post,M01-S3,One bug can span more than one file,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M01-S3.md,https://llmiser.devbehindyou.com/blog/task-focused-code-bundle,,
+M01-S3-P2,post,M01-S3,Show the caller-helper-test evidence chain,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M01-S3.md,https://llmiser.devbehindyou.com/blog/task-focused-code-bundle,,
+M01-S3-P3,post,M01-S3,Smallest is not always sufficient,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M01-S3.md,https://llmiser.devbehindyou.com/blog/task-focused-code-bundle,,
+M02-S1-P1,post,M02-S1,A readable scan can still face the wrong way,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M02-S1.md,https://llmiser.devbehindyou.com/blog/rotated-scan-ocr-check,,
+M02-S1-P2,post,M02-S1,Compare orientation using one controlled sample,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M02-S1.md,https://llmiser.devbehindyou.com/blog/rotated-scan-ocr-check,,
+M02-S1-P3,post,M02-S1,Rotation and blur need different checks,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M02-S1.md,https://llmiser.devbehindyou.com/blog/rotated-scan-ocr-check,,
+M02-S2-P1,post,M02-S2,A single zero can change the meaning,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M02-S2.md,https://llmiser.devbehindyou.com/blog/verify-ocr-numbers,,
+M02-S2-P2,post,M02-S2,Use a source-to-output number checklist,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M02-S2.md,https://llmiser.devbehindyou.com/blog/verify-ocr-numbers,,
+M02-S2-P3,post,M02-S2,Fluent text is not verified data,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M02-S2.md,https://llmiser.devbehindyou.com/blog/verify-ocr-numbers,,
+M02-S3-P1,post,M02-S3,Did every meaningful page make it through?,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M02-S3.md,https://llmiser.devbehindyou.com/blog/mixed-pdf-ocr-coverage,,
+M02-S3-P2,post,M02-S3,Map three source pages to output passages,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M02-S3.md,https://llmiser.devbehindyou.com/blog/mixed-pdf-ocr-coverage,,
+M02-S3-P3,post,M02-S3,A blank page differs from a missing page,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M02-S3.md,https://llmiser.devbehindyou.com/blog/mixed-pdf-ocr-coverage,,
+M03-S1-P1,post,M03-S1,00123 and 123 may name different records,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M03-S1.md,https://llmiser.devbehindyou.com/blog/excel-leading-zeros-ai,,
+M03-S1-P2,post,M03-S1,Compare text IDs with formatted numbers,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M03-S1.md,https://llmiser.devbehindyou.com/blog/excel-leading-zeros-ai,,
+M03-S1-P3,post,M03-S1,Formatting is not the stored value,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M03-S1.md,https://llmiser.devbehindyou.com/blog/excel-leading-zeros-ai,,
+M03-S2-P1,post,M03-S2,A formula is not proof of a fresh result,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M03-S2.md,https://llmiser.devbehindyou.com/blog/excel-formula-results-conversion,,
+M03-S2-P2,post,M03-S2,"Trace formula, saved value and Markdown output",BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M03-S2.md,https://llmiser.devbehindyou.com/blog/excel-formula-results-conversion,,
+M03-S2-P3,post,M03-S2,Conversion is not spreadsheet recalculation,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M03-S2.md,https://llmiser.devbehindyou.com/blog/excel-formula-results-conversion,,
+M03-S3-P1,post,M03-S3,Which unit belongs to this column?,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M03-S3.md,https://llmiser.devbehindyou.com/blog/merged-excel-headers-markdown,,
+M03-S3-P2,post,M03-S3,Before-and-after header map with real values,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M03-S3.md,https://llmiser.devbehindyou.com/blog/merged-excel-headers-markdown,,
+M03-S3-P3,post,M03-S3,Blank merged cells do not mean missing data,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M03-S3.md,https://llmiser.devbehindyou.com/blog/merged-excel-headers-markdown,,
+M04-S1-P1,post,M04-S1,Bold text and a heading are different inputs,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M04-S1.md,https://llmiser.devbehindyou.com/blog/word-heading-styles-markdown,,
+M04-S1-P2,post,M04-S1,Compare look-alike headings after conversion,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M04-S1.md,https://llmiser.devbehindyou.com/blog/word-heading-styles-markdown,,
+M04-S1-P3,post,M04-S1,Check hierarchy rather than font size,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M04-S1.md,https://llmiser.devbehindyou.com/blog/word-heading-styles-markdown,,
+M04-S2-P1,post,M04-S2,A sub-step should not become a new instruction,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M04-S2.md,https://llmiser.devbehindyou.com/blog/nested-word-lists-markdown,,
+M04-S2-P2,post,M04-S2,Map a parent item to its child steps,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M04-S2.md,https://llmiser.devbehindyou.com/blog/nested-word-lists-markdown,,
+M04-S2-P3,post,M04-S2,Correct words can have the wrong nesting,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M04-S2.md,https://llmiser.devbehindyou.com/blog/nested-word-lists-markdown,,
+M04-S3-P1,post,M04-S3,Which draft did you mean to share?,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M04-S3.md,https://llmiser.devbehindyou.com/blog/word-revisions-ai-sharing,,
+M04-S3-P2,post,M04-S3,"Compare original, revised and sharing views",BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M04-S3.md,https://llmiser.devbehindyou.com/blog/word-revisions-ai-sharing,,
+M04-S3-P3,post,M04-S3,Hidden review text needs an explicit decision,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M04-S3.md,https://llmiser.devbehindyou.com/blog/word-revisions-ai-sharing,,
+M05-S1-P1,post,M05-S1,The slide may not contain the whole explanation,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M05-S1.md,https://llmiser.devbehindyou.com/blog/powerpoint-speaker-notes-markdown,,
+M05-S1-P2,post,M05-S1,Make a slide-text versus notes checklist,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M05-S1.md,https://llmiser.devbehindyou.com/blog/powerpoint-speaker-notes-markdown,,
+M05-S1-P3,post,M05-S1,Do not assume notes survived conversion,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M05-S1.md,https://llmiser.devbehindyou.com/blog/powerpoint-speaker-notes-markdown,,
+M05-S2-P1,post,M05-S2,A chart title is not its data,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M05-S2.md,https://llmiser.devbehindyou.com/blog/slide-chart-context-ai,,
+M05-S2-P2,post,M05-S2,Show the labels a text description needs,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M05-S2.md,https://llmiser.devbehindyou.com/blog/slide-chart-context-ai,,
+M05-S2-P3,post,M05-S2,Keep the chart when shape is the evidence,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M05-S2.md,https://llmiser.devbehindyou.com/blog/slide-chart-context-ai,,
+M05-S3-P1,post,M05-S3,Repeated slide titles can hide a sequence change,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M05-S3.md,https://llmiser.devbehindyou.com/blog/slide-order-markdown,,
+M05-S3-P2,post,M05-S3,Trace one narrative across three slides,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M05-S3.md,https://llmiser.devbehindyou.com/blog/slide-order-markdown,,
+M05-S3-P3,post,M05-S3,Order is part of the context,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M05-S3.md,https://llmiser.devbehindyou.com/blog/slide-order-markdown,,
+M06-S1-P1,post,M06-S1,A comma inside a name is not a new column,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M06-S1.md,https://llmiser.devbehindyou.com/blog/csv-quoted-cells-markdown,,
+M06-S1-P2,post,M06-S1,Show one quoted row and its expected cells,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M06-S1.md,https://llmiser.devbehindyou.com/blog/csv-quoted-cells-markdown,,
+M06-S1-P3,post,M06-S1,Line breaks can belong inside one cell,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M06-S1.md,https://llmiser.devbehindyou.com/blog/csv-quoted-cells-markdown,,
+M06-S2-P1,post,M06-S2,Broken accents are a data problem,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M06-S2.md,https://llmiser.devbehindyou.com/blog/csv-encoding-ai,,
+M06-S2-P2,post,M06-S2,Compare the same characters before and after decoding,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M06-S2.md,https://llmiser.devbehindyou.com/blog/csv-encoding-ai,,
+M06-S2-P3,post,M06-S2,Changing the filename does not change encoding,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M06-S2.md,https://llmiser.devbehindyou.com/blog/csv-encoding-ai,,
+M06-S3-P1,post,M06-S3,An empty cell is not a shifted column,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M06-S3.md,https://llmiser.devbehindyou.com/blog/csv-empty-missing-fields,,
+M06-S3-P2,post,M06-S3,Compare three rows with different shapes,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M06-S3.md,https://llmiser.devbehindyou.com/blog/csv-empty-missing-fields,,
+M06-S3-P3,post,M06-S3,Do not guess what missing data should mean,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M06-S3.md,https://llmiser.devbehindyou.com/blog/csv-empty-missing-fields,,
+M07-S1-P1,post,M07-S1,A batch can contain different review tasks,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M07-S1.md,https://llmiser.devbehindyou.com/blog/mixed-file-batch-llmiser,,
+M07-S1-P2,post,M07-S1,Build a file-to-output checklist,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M07-S1.md,https://llmiser.devbehindyou.com/blog/mixed-file-batch-llmiser,,
+M07-S1-P3,post,M07-S1,One successful file does not prove the whole batch,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M07-S1.md,https://llmiser.devbehindyou.com/blog/mixed-file-batch-llmiser,,
+M07-S2-P1,post,M07-S2,Keep the results that already finished,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M07-S2.md,https://llmiser.devbehindyou.com/blog/partial-batch-conversion,,
+M07-S2-P2,post,M07-S2,Walk through a mixed success-and-failure queue,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M07-S2.md,https://llmiser.devbehindyou.com/blog/partial-batch-conversion,,
+M07-S2-P3,post,M07-S2,Retry is not the same as starting everything over,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M07-S2.md,https://llmiser.devbehindyou.com/blog/partial-batch-conversion,,
+M07-S3-P1,post,M07-S3,Batch count and file size are different limits,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M07-S3.md,https://llmiser.devbehindyou.com/blog/split-batch-upload-limits,,
+M07-S3-P2,post,M07-S3,Sort a sample inventory into valid batches,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M07-S3.md,https://llmiser.devbehindyou.com/blog/split-batch-upload-limits,,
+M07-S3-P3,post,M07-S3,An oversized file stays oversized in a smaller batch,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M07-S3.md,https://llmiser.devbehindyou.com/blog/split-batch-upload-limits,,
+M08-S1-P1,post,M08-S1,What did Clean actually change?,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M08-S1.md,https://llmiser.devbehindyou.com/blog/llmiser-standard-vs-clean,,
+M08-S1-P2,post,M08-S1,Use a two-column output diff,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M08-S1.md,https://llmiser.devbehindyou.com/blog/llmiser-standard-vs-clean,,
+M08-S1-P3,post,M08-S1,Cleaner formatting is not a content audit,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M08-S1.md,https://llmiser.devbehindyou.com/blog/llmiser-standard-vs-clean,,
+M08-S2-P1,post,M08-S2,Less whitespace can change how Markdown reads,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M08-S2.md,https://llmiser.devbehindyou.com/blog/llmiser-compact-markdown-check,,
+M08-S2-P2,post,M08-S2,Compare a structure-sensitive fragment,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M08-S2.md,https://llmiser.devbehindyou.com/blog/llmiser-compact-markdown-check,,
+M08-S2-P3,post,M08-S2,The shortest output is not always the best input,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M08-S2.md,https://llmiser.devbehindyou.com/blog/llmiser-compact-markdown-check,,
+M08-S3-P1,post,M08-S3,"A chunk marker is a hint, not a retrieval system",BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M08-S3.md,https://llmiser.devbehindyou.com/blog/llmiser-rag-ready-markers,,
+M08-S3-P2,post,M08-S3,Annotate one heading and its marker,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M08-S3.md,https://llmiser.devbehindyou.com/blog/llmiser-rag-ready-markers,,
+M08-S3-P3,post,M08-S3,Your downstream splitter still needs testing,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M08-S3.md,https://llmiser.devbehindyou.com/blog/llmiser-rag-ready-markers,,
+M09-S1-P1,post,M09-S1,Which version reached your download?,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M09-S1.md,https://llmiser.devbehindyou.com/blog/original-edited-markdown,,
+M09-S1-P2,post,M09-S1,Trace one visible edit through export,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M09-S1.md,https://llmiser.devbehindyou.com/blog/original-edited-markdown,,
+M09-S1-P3,post,M09-S1,Recovered output may not be your edited draft,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M09-S1.md,https://llmiser.devbehindyou.com/blog/original-edited-markdown,,
+M09-S2-P1,post,M09-S2,A preview is not the whole verification,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M09-S2.md,https://llmiser.devbehindyou.com/blog/long-markdown-preview,,
+M09-S2-P2,post,M09-S2,Check three landmarks in a long export,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M09-S2.md,https://llmiser.devbehindyou.com/blog/long-markdown-preview,,
+M09-S2-P3,post,M09-S2,Rendering limits and data loss are different problems,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M09-S2.md,https://llmiser.devbehindyou.com/blog/long-markdown-preview,,
+M09-S3-P1,post,M09-S3,"Check the destination, not just the copy button",BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M09-S3.md,https://llmiser.devbehindyou.com/blog/copy-download-markdown,,
+M09-S3-P2,post,M09-S3,Compare clipboard text with a downloaded file,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M09-S3.md,https://llmiser.devbehindyou.com/blog/copy-download-markdown,,
+M09-S3-P3,post,M09-S3,Formatting changes can happen after export,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M09-S3.md,https://llmiser.devbehindyou.com/blog/copy-download-markdown,,
+M10-S1-P1,post,M10-S1,Two config files can have different jobs,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M10-S1.md,https://llmiser.devbehindyou.com/blog/read-project-index-paths,,
+M10-S1-P2,post,M10-S1,Follow a full path from index to content,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M10-S1.md,https://llmiser.devbehindyou.com/blog/read-project-index-paths,,
+M10-S1-P3,post,M10-S1,A basename alone may be ambiguous,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M10-S1.md,https://llmiser.devbehindyou.com/blog/read-project-index-paths,,
+M10-S2-P1,post,M10-S2,Success does not mean every file was included,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M10-S2.md,https://llmiser.devbehindyou.com/blog/reconcile-zip-manifest,,
+M10-S2-P2,post,M10-S2,Compare expected entries with reported outcomes,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M10-S2.md,https://llmiser.devbehindyou.com/blog/reconcile-zip-manifest,,
+M10-S2-P3,post,M10-S2,"Count converted, skipped and unresolved separately",BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M10-S2.md,https://llmiser.devbehindyou.com/blog/reconcile-zip-manifest,,
+M10-S3-P1,post,M10-S3,Where did that archive entry go?,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M10-S3.md,https://llmiser.devbehindyou.com/blog/missing-zip-conversion-content,,
+M10-S3-P2,post,M10-S3,Trace a missing item through the result artifacts,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M10-S3.md,https://llmiser.devbehindyou.com/blog/missing-zip-conversion-content,,
+M10-S3-P3,post,M10-S3,Omitted content needs an explanation,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M10-S3.md,https://llmiser.devbehindyou.com/blog/missing-zip-conversion-content,,
+M11-S1-P1,post,M11-S1,Who actually asked the AI to do that?,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M11-S1.md,https://llmiser.devbehindyou.com/blog/untrusted-document-instructions,,
+M11-S1-P2,post,M11-S1,Label task instruction versus document quotation,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M11-S1.md,https://llmiser.devbehindyou.com/blog/untrusted-document-instructions,,
+M11-S1-P3,post,M11-S1,Official-looking wording does not grant authority,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M11-S1.md,https://llmiser.devbehindyou.com/blog/untrusted-document-instructions,,
+M11-S2-P1,post,M11-S2,A new format does not make text trusted,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M11-S2.md,https://llmiser.devbehindyou.com/blog/markdown-conversion-prompt-injection,,
+M11-S2-P2,post,M11-S2,Follow one harmless instruction-shaped sentence,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M11-S2.md,https://llmiser.devbehindyou.com/blog/markdown-conversion-prompt-injection,,
+M11-S2-P3,post,M11-S2,Removing formatting is not removing intent,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M11-S2.md,https://llmiser.devbehindyou.com/blog/markdown-conversion-prompt-injection,,
+M11-S3-P1,post,M11-S3,Reading a document should not grant it permissions,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M11-S3.md,https://llmiser.devbehindyou.com/blog/ai-actions-external-documents,,
+M11-S3-P2,post,M11-S3,Draw the boundary between reading and acting,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M11-S3.md,https://llmiser.devbehindyou.com/blog/ai-actions-external-documents,,
+M11-S3-P3,post,M11-S3,A citation is not approval to perform an action,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M11-S3.md,https://llmiser.devbehindyou.com/blog/ai-actions-external-documents,,
+M12-S1-P1,post,M12-S1,Downloaded today does not mean effective today,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M12-S1.md,https://llmiser.devbehindyou.com/blog/label-document-versions-ai,,
+M12-S1-P2,post,M12-S1,Compare revision date with effective date,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M12-S1.md,https://llmiser.devbehindyou.com/blog/label-document-versions-ai,,
+M12-S1-P3,post,M12-S1,A filename is only one piece of provenance,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M12-S1.md,https://llmiser.devbehindyou.com/blog/label-document-versions-ai,,
+M12-S2-P1,post,M12-S2,Both passages can be valid in different contexts,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M12-S2.md,https://llmiser.devbehindyou.com/blog/conflicting-policy-passages-ai,,
+M12-S2-P2,post,M12-S2,Build a scope-and-date comparison card,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M12-S2.md,https://llmiser.devbehindyou.com/blog/conflicting-policy-passages-ai,,
+M12-S2-P3,post,M12-S2,The latest document is not always the applicable one,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M12-S2.md,https://llmiser.devbehindyou.com/blog/conflicting-policy-passages-ai,,
+M12-S3-P1,post,M12-S3,Updating the source may leave old excerpts behind,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M12-S3.md,https://llmiser.devbehindyou.com/blog/stale-excerpts-ai-context,,
+M12-S3-P2,post,M12-S3,Trace one revised fact through the packet,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M12-S3.md,https://llmiser.devbehindyou.com/blog/stale-excerpts-ai-context,,
+M12-S3-P3,post,M12-S3,Do not keep both versions without explaining why,BRIEF_READY_COPY_NOT_DRAFTED,campaign/post-briefs/M12-S3.md,https://llmiser.devbehindyou.com/blog/stale-excerpts-ai-context,,
diff --git a/blog-pipeline/campaign/main-briefs/M01.md b/blog-pipeline/campaign/main-briefs/M01.md
new file mode 100644
index 0000000..55a8cf7
--- /dev/null
+++ b/blog-pipeline/campaign/main-briefs/M01.md
@@ -0,0 +1,60 @@
+# M01 — 7 Things to Remove Before Sharing a Codebase With AI
+
+Title: USER_SELECTED on 5 November 2026. Article: PROPOSED, not written or published.
+
+Metadata owner: [intent-registry.json](../../intent-registry.json), record `M01`. Preserve the selected title exactly. Category: listicle. Parent context: E08.
+
+## Reader task and limits
+
+Keep task-relevant source, tests and dependency manifests. Removal is a reviewed choice, not automatic sanitization.
+
+Nearest owners: M10, E08. Explain the overview here, then send detailed troubleshooting to the three supports. Avoid reproducing their full procedures.
+
+## Outline
+
+1. Secrets and local credentials
+2. Private data and identifying logs
+3. Installed dependency directories
+4. Generated build output
+5. Caches and temporary files
+6. Irrelevant large binaries
+7. Duplicate or obsolete copies
+
+The title promises 7 items. Keep that count in the core numbered sections; introduction, FAQ and CTA are outside the count.
+
+## Three supporting articles
+
+- [M01-S1: Check a Project ZIP for Secrets Before Sharing It](../support-briefs/M01-S1.md) — How do I review a sharing copy for credentials and private data?
+- [M01-S2: Which Dependency Files Should You Keep for AI Review?](../support-briefs/M01-S2.md) — What should remain when installed packages are removed?
+- [M01-S3: Build a Task-Focused Code Bundle With Tests](../support-briefs/M01-S3.md) — How do I select enough source and tests for one code question?
+
+## Evidence and source plan
+
+Source IDs: SRC-GIT, SRC-LOCAL. Resolve them in [sources.json](../sources.json). Product-specific behavior requires the current app/code and an original sample, not a competitor feature list. Reuse the supports’ tested fixtures to avoid inventing separate demonstrations.
+
+- M01-S1: Toy repo with clearly fake keys, a synthetic log and harmless config. Compare the original and sharing inventory.
+- M01-S2: Toy project with package manifest, lockfile, vendor folder and import requiring version context.
+- M01-S3: Toy bug spanning a caller, helper and test; compare a minimal sufficient bundle with an incomplete one.
+
+## Visual plan
+
+Banner: illustrate this selected task with the current Prompt L identity, not a savings claim.
+
+1. An overview of the main workflow or numbered checks.
+2. A source-to-output comparison using the cluster fixture.
+3. A decision chart around the cluster’s scope boundary.
+4. A final inspection checklist with labels and a limitation.
+
+Each figure must use specific content from the draft. Review dark/light and narrow layout; four figures is not permission for decorative padding.
+
+## Linking and CTA
+
+Link to E08 only for relevant broader context; use short handoffs to the three supports. Do not link to unpublished URLs until included in a release. One contextual converter CTA is enough. For M11/M12, explain that LLMiser prepares text and does not enforce trust or document precedence.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/main-briefs/M02.md b/blog-pipeline/campaign/main-briefs/M02.md
new file mode 100644
index 0000000..eedde48
--- /dev/null
+++ b/blog-pipeline/campaign/main-briefs/M02.md
@@ -0,0 +1,62 @@
+# M02 — 9 OCR Checks Before You Send Scanned Text to AI
+
+Title: USER_SELECTED on 5 November 2026. Article: PROPOSED, not written or published.
+
+Metadata owner: [intent-registry.json](../../intent-registry.json), record `M02`. Preserve the selected title exactly. Category: listicle. Parent context: E08.
+
+## Reader task and limits
+
+A quality checklist, not a second PDF-cost article or a guarantee of accurate recognition.
+
+Nearest owners: E06, E07, E08. Explain the overview here, then send detailed troubleshooting to the three supports. Avoid reproducing their full procedures.
+
+## Outline
+
+1. Text is actually present
+2. Page coverage and order
+3. Rotation and orientation
+4. Small or blurred text
+5. Numbers and decimal marks
+6. Dates and identifiers
+7. Columns and reading order
+8. Table labels and values
+9. Manual comparison with the original
+
+The title promises 9 items. Keep that count in the core numbered sections; introduction, FAQ and CTA are outside the count.
+
+## Three supporting articles
+
+- [M02-S1: Check Rotated Scans Before Running OCR](../support-briefs/M02-S1.md) — How does orientation affect recognition in a specific sample?
+- [M02-S2: Verify Numbers and Identifiers in OCR Output](../support-briefs/M02-S2.md) — How do I verify digits and labels without trusting fluent OCR text?
+- [M02-S3: Check OCR Coverage in a Mixed PDF](../support-briefs/M02-S3.md) — How do I confirm that a PDF with text and scanned pages is represented?
+
+## Evidence and source plan
+
+Source IDs: SRC-LOCAL, SRC-OCR-RESEARCH. Resolve them in [sources.json](../sources.json). Product-specific behavior requires the current app/code and an original sample, not a competitor feature list. Reuse the supports’ tested fixtures to avoid inventing separate demonstrations.
+
+- M02-S1: Synthetic English image at 0 and 90 degrees, plus a carefully rotated copy; save actual outputs.
+- M02-S2: Synthetic invoice with 00123, 10.50, a date and letter O/zero examples.
+- M02-S3: Three-page fixture with native text, image-only text and an intentional blank page.
+
+## Visual plan
+
+Banner: illustrate this selected task with the current Prompt L identity, not a savings claim.
+
+1. An overview of the main workflow or numbered checks.
+2. A source-to-output comparison using the cluster fixture.
+3. A decision chart around the cluster’s scope boundary.
+4. A final inspection checklist with labels and a limitation.
+
+Each figure must use specific content from the draft. Review dark/light and narrow layout; four figures is not permission for decorative padding.
+
+## Linking and CTA
+
+Link to E08 only for relevant broader context; use short handoffs to the three supports. Do not link to unpublished URLs until included in a release. One contextual converter CTA is enough. For M11/M12, explain that LLMiser prepares text and does not enforce trust or document precedence.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/main-briefs/M03.md b/blog-pipeline/campaign/main-briefs/M03.md
new file mode 100644
index 0000000..68509bc
--- /dev/null
+++ b/blog-pipeline/campaign/main-briefs/M03.md
@@ -0,0 +1,60 @@
+# M03 — 7 Excel Details to Check Before Sharing Data With AI
+
+Title: USER_SELECTED on 5 November 2026. Article: PROPOSED, not written or published.
+
+Metadata owner: [intent-registry.json](../../intent-registry.json), record `M03`. Preserve the selected title exactly. Category: listicle. Parent context: E08.
+
+## Reader task and limits
+
+Own workbook semantics; delimiters and delimited-file encoding belong to M06.
+
+Nearest owners: M06, E08. Explain the overview here, then send detailed troubleshooting to the three supports. Avoid reproducing their full procedures.
+
+## Outline
+
+1. Relevant sheets and their order
+2. Headers and units
+3. Leading zeros and identifiers
+4. Dates and number formats
+5. Formula results and freshness
+6. Merged cells and blank values
+7. Charts and other non-cell context
+
+The title promises 7 items. Keep that count in the core numbered sections; introduction, FAQ and CTA are outside the count.
+
+## Three supporting articles
+
+- [M03-S1: Keep Leading Zeros When Preparing Excel Data for AI](../support-briefs/M03-S1.md) — How do I distinguish identifiers from numeric quantities?
+- [M03-S2: Check Excel Formula Results Before Conversion](../support-briefs/M03-S2.md) — What evidence shows whether formula results are current?
+- [M03-S3: Prepare Merged Excel Headers for Markdown Tables](../support-briefs/M03-S3.md) — How can I make multi-level spreadsheet labels unambiguous?
+
+## Evidence and source plan
+
+Source IDs: SRC-EXCEL, SRC-LOCAL. Resolve them in [sources.json](../sources.json). Product-specific behavior requires the current app/code and an original sample, not a competitor feature list. Reuse the supports’ tested fixtures to avoid inventing separate demonstrations.
+
+- M03-S1: Workbook with text 00123, numeric 123 formatted as 00000 and a long ID.
+- M03-S2: Workbook with formula, known result and a stale/absent cached-value case where reproducible.
+- M03-S3: Small two-level header workbook and manually flattened copy with units retained.
+
+## Visual plan
+
+Banner: illustrate this selected task with the current Prompt L identity, not a savings claim.
+
+1. An overview of the main workflow or numbered checks.
+2. A source-to-output comparison using the cluster fixture.
+3. A decision chart around the cluster’s scope boundary.
+4. A final inspection checklist with labels and a limitation.
+
+Each figure must use specific content from the draft. Review dark/light and narrow layout; four figures is not permission for decorative padding.
+
+## Linking and CTA
+
+Link to E08 only for relevant broader context; use short handoffs to the three supports. Do not link to unpublished URLs until included in a release. One contextual converter CTA is enough. For M11/M12, explain that LLMiser prepares text and does not enforce trust or document precedence.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/main-briefs/M04.md b/blog-pipeline/campaign/main-briefs/M04.md
new file mode 100644
index 0000000..f56e205
--- /dev/null
+++ b/blog-pipeline/campaign/main-briefs/M04.md
@@ -0,0 +1,59 @@
+# M04 — 6 Ways to Prepare Word Documents for AI
+
+Title: USER_SELECTED on 5 November 2026. Article: PROPOSED, not written or published.
+
+Metadata owner: [intent-registry.json](../../intent-registry.json), record `M04`. Preserve the selected title exactly. Category: listicle. Parent context: E08.
+
+## Reader task and limits
+
+DOCX source preparation, not legacy .doc support or guaranteed formatting preservation.
+
+Nearest owners: E08. Explain the overview here, then send detailed troubleshooting to the three supports. Avoid reproducing their full procedures.
+
+## Outline
+
+1. Use actual heading styles
+2. Check nested lists
+3. Simplify table structure
+4. Resolve tracked changes in a sharing copy
+5. Add needed context for images and references
+6. Review the converted Markdown
+
+The title promises 6 items. Keep that count in the core numbered sections; introduction, FAQ and CTA are outside the count.
+
+## Three supporting articles
+
+- [M04-S1: Use Word Heading Styles Before Markdown Conversion](../support-briefs/M04-S1.md) — How do semantic styles differ from large bold text?
+- [M04-S2: Check Nested Word Lists in Markdown Output](../support-briefs/M04-S2.md) — How do I verify parent-child relationships in converted lists?
+- [M04-S3: Prepare Word Revisions and Comments for AI Sharing](../support-briefs/M04-S3.md) — Which revision view and comments should a shared document represent?
+
+## Evidence and source plan
+
+Source IDs: SRC-HEADINGS, SRC-LOCAL. Resolve them in [sources.json](../sources.json). Product-specific behavior requires the current app/code and an original sample, not a competitor feature list. Reuse the supports’ tested fixtures to avoid inventing separate demonstrations.
+
+- M04-S1: DOCX pair with visually similar bold text versus actual heading styles.
+- M04-S2: DOCX with nested numbered and bulleted items, including restarted numbering.
+- M04-S3: Synthetic DOCX containing a harmless tracked replacement and comment; record the chosen revision view.
+
+## Visual plan
+
+Banner: illustrate this selected task with the current Prompt L identity, not a savings claim.
+
+1. An overview of the main workflow or numbered checks.
+2. A source-to-output comparison using the cluster fixture.
+3. A decision chart around the cluster’s scope boundary.
+4. A final inspection checklist with labels and a limitation.
+
+Each figure must use specific content from the draft. Review dark/light and narrow layout; four figures is not permission for decorative padding.
+
+## Linking and CTA
+
+Link to E08 only for relevant broader context; use short handoffs to the three supports. Do not link to unpublished URLs until included in a release. One contextual converter CTA is enough. For M11/M12, explain that LLMiser prepares text and does not enforce trust or document precedence.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/main-briefs/M05.md b/blog-pipeline/campaign/main-briefs/M05.md
new file mode 100644
index 0000000..e644e0f
--- /dev/null
+++ b/blog-pipeline/campaign/main-briefs/M05.md
@@ -0,0 +1,61 @@
+# M05 — 8 Checks When Converting PowerPoint to Markdown
+
+Title: USER_SELECTED on 5 November 2026. Article: PROPOSED, not written or published.
+
+Metadata owner: [intent-registry.json](../../intent-registry.json), record `M05`. Preserve the selected title exactly. Category: listicle. Parent context: E08.
+
+## Reader task and limits
+
+Verify notes and chart behavior; do not imply all slide information becomes text.
+
+Nearest owners: E07, E08. Explain the overview here, then send detailed troubleshooting to the three supports. Avoid reproducing their full procedures.
+
+## Outline
+
+1. Slide order
+2. Titles and section context
+3. Body text and bullet hierarchy
+4. Speaker notes
+5. Charts and axis labels
+6. Image-only slides
+7. Tables and numeric labels
+8. Output review against the original deck
+
+The title promises 8 items. Keep that count in the core numbered sections; introduction, FAQ and CTA are outside the count.
+
+## Three supporting articles
+
+- [M05-S1: Check PowerPoint Speaker Notes After Conversion](../support-briefs/M05-S1.md) — Are important speaker notes represented in this output?
+- [M05-S2: Carry Chart Context From Slides Into AI Prompts](../support-briefs/M05-S2.md) — What chart information must accompany a text-only slide export?
+- [M05-S3: Keep Slide Titles and Order Clear in Markdown](../support-briefs/M05-S3.md) — How do I retain the sequence needed to interpret a deck?
+
+## Evidence and source plan
+
+Source IDs: SRC-LOCAL. Resolve them in [sources.json](../sources.json). Product-specific behavior requires the current app/code and an original sample, not a competitor feature list. Reuse the supports’ tested fixtures to avoid inventing separate demonstrations.
+
+- M05-S1: Three-slide deck with notes on one slide and no notes on another.
+- M05-S2: Original chart with labels, units and a visible trend; write a checked textual description.
+- M05-S3: Deck with repeated titles, a section slide and a sequence-dependent explanation.
+
+## Visual plan
+
+Banner: illustrate this selected task with the current Prompt L identity, not a savings claim.
+
+1. An overview of the main workflow or numbered checks.
+2. A source-to-output comparison using the cluster fixture.
+3. A decision chart around the cluster’s scope boundary.
+4. A final inspection checklist with labels and a limitation.
+
+Each figure must use specific content from the draft. Review dark/light and narrow layout; four figures is not permission for decorative padding.
+
+## Linking and CTA
+
+Link to E08 only for relevant broader context; use short handoffs to the three supports. Do not link to unpublished URLs until included in a release. One contextual converter CTA is enough. For M11/M12, explain that LLMiser prepares text and does not enforce trust or document precedence.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/main-briefs/M06.md b/blog-pipeline/campaign/main-briefs/M06.md
new file mode 100644
index 0000000..08668c6
--- /dev/null
+++ b/blog-pipeline/campaign/main-briefs/M06.md
@@ -0,0 +1,60 @@
+# M06 — 7 Ways to Prepare Cleaner CSV Data for AI
+
+Title: USER_SELECTED on 5 November 2026. Article: PROPOSED, not written or published.
+
+Metadata owner: [intent-registry.json](../../intent-registry.json), record `M06`. Preserve the selected title exactly. Category: listicle. Parent context: E08.
+
+## Reader task and limits
+
+Own delimited-text preparation. Workbook styles, formulas and sheets stay with M03.
+
+Nearest owners: M03. Explain the overview here, then send detailed troubleshooting to the three supports. Avoid reproducing their full procedures.
+
+## Outline
+
+1. Identify the delimiter
+2. Quote separators inside cells
+3. Check text encoding
+4. Give columns meaningful headers
+5. Make units and data types explicit
+6. Inspect missing fields and row shape
+7. Test a small conversion sample
+
+The title promises 7 items. Keep that count in the core numbered sections; introduction, FAQ and CTA are outside the count.
+
+## Three supporting articles
+
+- [M06-S1: Handle Commas and Quotes Inside CSV Cells](../support-briefs/M06-S1.md) — How do I verify that quoted separators remain inside a cell?
+- [M06-S2: Check CSV Encoding Before Sharing Text With AI](../support-briefs/M06-S2.md) — How can I diagnose corrupted text before using converted output?
+- [M06-S3: Distinguish Empty CSV Cells From Missing Fields](../support-briefs/M06-S3.md) — How do missing delimiters differ from intentionally blank values?
+
+## Evidence and source plan
+
+Source IDs: SRC-CSV, SRC-LOCAL. Resolve them in [sources.json](../sources.json). Product-specific behavior requires the current app/code and an original sample, not a competitor feature list. Reuse the supports’ tested fixtures to avoid inventing separate demonstrations.
+
+- M06-S1: Synthetic CSV with comma inside quotes, escaped quote and embedded newline.
+- M06-S2: UTF-8 sample with accented names and a deliberately misdecoded demonstration; no personal data.
+- M06-S3: Rows with a blank middle cell, missing last field and extra delimiter.
+
+## Visual plan
+
+Banner: illustrate this selected task with the current Prompt L identity, not a savings claim.
+
+1. An overview of the main workflow or numbered checks.
+2. A source-to-output comparison using the cluster fixture.
+3. A decision chart around the cluster’s scope boundary.
+4. A final inspection checklist with labels and a limitation.
+
+Each figure must use specific content from the draft. Review dark/light and narrow layout; four figures is not permission for decorative padding.
+
+## Linking and CTA
+
+Link to E08 only for relevant broader context; use short handoffs to the three supports. Do not link to unpublished URLs until included in a release. One contextual converter CTA is enough. For M11/M12, explain that LLMiser prepares text and does not enforce trust or document precedence.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/main-briefs/M07.md b/blog-pipeline/campaign/main-briefs/M07.md
new file mode 100644
index 0000000..fdec22e
--- /dev/null
+++ b/blog-pipeline/campaign/main-briefs/M07.md
@@ -0,0 +1,57 @@
+# M07 — How to Convert Multiple Files With LLMiser
+
+Title: USER_SELECTED on 5 November 2026. Article: PROPOSED, not written or published.
+
+Metadata owner: [intent-registry.json](../../intent-registry.json), record `M07`. Preserve the selected title exactly. Category: product. Parent context: E08.
+
+## Reader task and limits
+
+Batch intake and per-file outcomes; deeper editing/export belongs to M09.
+
+Nearest owners: M09. Explain the overview here, then send detailed troubleshooting to the three supports. Avoid reproducing their full procedures.
+
+## Outline
+
+1. Choose supported files and check limits
+2. Add files through picker or drag-and-drop
+3. Choose a profile and start conversion
+4. Read each file's outcome
+5. Review and download results
+6. Handle failures without assuming all succeeded
+
+## Three supporting articles
+
+- [M07-S1: Plan a Batch With Different Supported File Types](../support-briefs/M07-S1.md) — How do I organize a supported mixed-format batch?
+- [M07-S2: Handle Partial Conversion Failures in a Batch](../support-briefs/M07-S2.md) — How do I recover when some files finish and others fail?
+- [M07-S3: Split a File Batch Around LLMiser's Upload Limits](../support-briefs/M07-S3.md) — How do I plan a batch that meets documented per-file and queue limits?
+
+## Evidence and source plan
+
+Source IDs: SRC-LOCAL. Resolve them in [sources.json](../sources.json). Product-specific behavior requires the current app/code and an original sample, not a competitor feature list. Reuse the supports’ tested fixtures to avoid inventing separate demonstrations.
+
+- M07-S1: Small PDF, DOCX and image fixture set with identifiable content in each.
+- M07-S2: One valid document plus an intentionally invalid supported-format fixture in a controlled local/test environment.
+- M07-S3: Local file-size/count inventory and UI validation checks; no oversized production upload necessary.
+
+## Visual plan
+
+Banner: illustrate this selected task with the current Prompt L identity, not a savings claim.
+
+1. An overview of the main workflow or numbered checks.
+2. A source-to-output comparison using the cluster fixture.
+3. A decision chart around the cluster’s scope boundary.
+4. A final inspection checklist with labels and a limitation.
+
+Each figure must use specific content from the draft. Review dark/light and narrow layout; four figures is not permission for decorative padding.
+
+## Linking and CTA
+
+Link to E08 only for relevant broader context; use short handoffs to the three supports. Do not link to unpublished URLs until included in a release. One contextual converter CTA is enough. For M11/M12, explain that LLMiser prepares text and does not enforce trust or document precedence.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/main-briefs/M08.md b/blog-pipeline/campaign/main-briefs/M08.md
new file mode 100644
index 0000000..59dd214
--- /dev/null
+++ b/blog-pipeline/campaign/main-briefs/M08.md
@@ -0,0 +1,57 @@
+# M08 — LLMiser Profiles: Standard, Clean, Compact, RAG-ready
+
+Title: USER_SELECTED on 5 November 2026. Article: PROPOSED, not written or published.
+
+Metadata owner: [intent-registry.json](../../intent-registry.json), record `M08`. Preserve the selected title exactly. Category: product. Parent context: E08.
+
+## Reader task and limits
+
+Only shipped transformations; a profile is not a retriever, tokenizer or semantic repair tool.
+
+Nearest owners: E03, E05, E08. Explain the overview here, then send detailed troubleshooting to the three supports. Avoid reproducing their full procedures.
+
+## Outline
+
+1. Use one source for a fair comparison
+2. Standard output
+3. Clean output
+4. Compact output
+5. RAG-ready output
+6. Choose from actual differences, then inspect
+
+## Three supporting articles
+
+- [M08-S1: Standard vs Clean: Compare LLMiser Output](../support-briefs/M08-S1.md) — What changes between Standard and Clean for the same input?
+- [M08-S2: Check Compact Markdown Before You Use It](../support-briefs/M08-S2.md) — What needs checking when compact formatting removes separators or spacing?
+- [M08-S3: What LLMiser's RAG-ready Markers Do](../support-briefs/M08-S3.md) — What does a chunk-boundary marker communicate and what does it not do?
+
+## Evidence and source plan
+
+Source IDs: SRC-LOCAL, SRC-MARKDOWN. Resolve them in [sources.json](../sources.json). Product-specific behavior requires the current app/code and an original sample, not a competitor feature list. Reuse the supports’ tested fixtures to avoid inventing separate demonstrations.
+
+- M08-S1: Same short Markdown/document input under both profiles, saved as an actual diff.
+- M08-S2: Fixture with blank lines, horizontal rules, table syntax and hyphen sequences; compare all bytes.
+- M08-S3: Fixture with H1/H2/H3 and fenced text; inspect marker placement without publishing a fragile splitter.
+
+## Visual plan
+
+Banner: illustrate this selected task with the current Prompt L identity, not a savings claim.
+
+1. An overview of the main workflow or numbered checks.
+2. A source-to-output comparison using the cluster fixture.
+3. A decision chart around the cluster’s scope boundary.
+4. A final inspection checklist with labels and a limitation.
+
+Each figure must use specific content from the draft. Review dark/light and narrow layout; four figures is not permission for decorative padding.
+
+## Linking and CTA
+
+Link to E08 only for relevant broader context; use short handoffs to the three supports. Do not link to unpublished URLs until included in a release. One contextual converter CTA is enough. For M11/M12, explain that LLMiser prepares text and does not enforce trust or document precedence.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/main-briefs/M09.md b/blog-pipeline/campaign/main-briefs/M09.md
new file mode 100644
index 0000000..5beeb38
--- /dev/null
+++ b/blog-pipeline/campaign/main-briefs/M09.md
@@ -0,0 +1,57 @@
+# M09 — How to Edit and Export Markdown With LLMiser
+
+Title: USER_SELECTED on 5 November 2026. Article: PROPOSED, not written or published.
+
+Metadata owner: [intent-registry.json](../../intent-registry.json), record `M09`. Preserve the selected title exactly. Category: product. Parent context: E08.
+
+## Reader task and limits
+
+Post-conversion workflow; batch queue management belongs to M07.
+
+Nearest owners: M07. Explain the overview here, then send detailed troubleshooting to the three supports. Avoid reproducing their full procedures.
+
+## Outline
+
+1. Open and inspect converted output
+2. Edit a working copy
+3. Understand original versus edited output
+4. Review long text without mistaking preview for truncation
+5. Choose copy or download
+6. Verify the exported file
+
+## Three supporting articles
+
+- [M09-S1: Original or Edited Markdown: Which File Are You Saving?](../support-briefs/M09-S1.md) — How can I tell whether an export includes my edits?
+- [M09-S2: Check Long Markdown Beyond the Preview](../support-briefs/M09-S2.md) — How do I distinguish a limited rendering view from incomplete output?
+- [M09-S3: Copy or Download Markdown: Check the Result](../support-briefs/M09-S3.md) — What should I check after moving Markdown to another app?
+
+## Evidence and source plan
+
+Source IDs: SRC-LOCAL, SRC-MARKDOWN. Resolve them in [sources.json](../sources.json). Product-specific behavior requires the current app/code and an original sample, not a competitor feature list. Reuse the supports’ tested fixtures to avoid inventing separate demonstrations.
+
+- M09-S1: Tiny fixture with a unique marker inserted in editor; compare copy/download/recovery behavior.
+- M09-S2: Synthetic long text with markers at start, middle and end; inspect current preview/export behavior.
+- M09-S3: Small Unicode, pipe-table and fenced-code fixture copied to a plain text editor and downloaded.
+
+## Visual plan
+
+Banner: illustrate this selected task with the current Prompt L identity, not a savings claim.
+
+1. An overview of the main workflow or numbered checks.
+2. A source-to-output comparison using the cluster fixture.
+3. A decision chart around the cluster’s scope boundary.
+4. A final inspection checklist with labels and a limitation.
+
+Each figure must use specific content from the draft. Review dark/light and narrow layout; four figures is not permission for decorative padding.
+
+## Linking and CTA
+
+Link to E08 only for relevant broader context; use short handoffs to the three supports. Do not link to unpublished URLs until included in a release. One contextual converter CTA is enough. For M11/M12, explain that LLMiser prepares text and does not enforce trust or document precedence.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/main-briefs/M10.md b/blog-pipeline/campaign/main-briefs/M10.md
new file mode 100644
index 0000000..fccde14
--- /dev/null
+++ b/blog-pipeline/campaign/main-briefs/M10.md
@@ -0,0 +1,57 @@
+# M10 — How to Read LLMiser's ZIP Index and Manifest
+
+Title: USER_SELECTED on 5 November 2026. Article: PROPOSED, not written or published.
+
+Metadata owner: [intent-registry.json](../../intent-registry.json), record `M10`. Preserve the selected title exactly. Category: product. Parent context: E08.
+
+## Reader task and limits
+
+Artifact interpretation after conversion; pre-upload exclusions belong to M01.
+
+Nearest owners: M01, E08. Explain the overview here, then send detailed troubleshooting to the three supports. Avoid reproducing their full procedures.
+
+## Outline
+
+1. Identify the returned artifacts
+2. Read paths in the project index
+3. Inspect actual manifest fields
+4. Account for expected and omitted files
+5. Investigate partial results
+6. Select context for the next task
+
+## Three supporting articles
+
+- [M10-S1: Find Relevant Files in PROJECT_INDEX.md](../support-briefs/M10-S1.md) — How do source paths help locate the right converted file?
+- [M10-S2: Reconcile a ZIP Manifest With Your Source Files](../support-briefs/M10-S2.md) — How do I account for every intended source item after conversion?
+- [M10-S3: Investigate Missing Content in a ZIP Conversion](../support-briefs/M10-S3.md) — How do I distinguish an intentional exclusion from a conversion omission?
+
+## Evidence and source plan
+
+Source IDs: SRC-LOCAL. Resolve them in [sources.json](../sources.json). Product-specific behavior requires the current app/code and an original sample, not a competitor feature list. Reuse the supports’ tested fixtures to avoid inventing separate demonstrations.
+
+- M10-S1: ZIP with src/config.txt and docs/config.txt containing different text; inspect index and combined output.
+- M10-S2: Tiny ZIP inventory with valid supported entries and a deliberately unsupported harmless item; save actual manifest.
+- M10-S3: Controlled nested-archive or unsupported-entry fixture with documented limits; inspect actual result.
+
+## Visual plan
+
+Banner: illustrate this selected task with the current Prompt L identity, not a savings claim.
+
+1. An overview of the main workflow or numbered checks.
+2. A source-to-output comparison using the cluster fixture.
+3. A decision chart around the cluster’s scope boundary.
+4. A final inspection checklist with labels and a limitation.
+
+Each figure must use specific content from the draft. Review dark/light and narrow layout; four figures is not permission for decorative padding.
+
+## Linking and CTA
+
+Link to E08 only for relevant broader context; use short handoffs to the three supports. Do not link to unpublished URLs until included in a release. One contextual converter CTA is enough. For M11/M12, explain that LLMiser prepares text and does not enforce trust or document precedence.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/main-briefs/M11.md b/blog-pipeline/campaign/main-briefs/M11.md
new file mode 100644
index 0000000..85d78f6
--- /dev/null
+++ b/blog-pipeline/campaign/main-briefs/M11.md
@@ -0,0 +1,57 @@
+# M11 — Prompt Injection: Can a Document Hijack Your AI?
+
+Title: USER_SELECTED on 5 November 2026. Article: PROPOSED, not written or published.
+
+Metadata owner: [intent-registry.json](../../intent-registry.json), record `M11`. Preserve the selected title exactly. Category: misc. Parent context: E08.
+
+## Reader task and limits
+
+Education only: LLMiser is not a prompt-injection detector or security boundary.
+
+Nearest owners: M12. Explain the overview here, then send detailed troubleshooting to the three supports. Avoid reproducing their full procedures.
+
+## Outline
+
+1. Distinguish source content from trusted instructions
+2. Trace an indirect instruction attempt
+3. Recognize suspicious document language
+4. Why conversion does not establish trust
+5. Use review and limited downstream permissions
+6. Know the limits of detection
+
+## Three supporting articles
+
+- [M11-S1: Recognize Instructions Inside an Untrusted Document](../support-briefs/M11-S1.md) — How do I recognize source text attempting to redirect the task?
+- [M11-S2: Why Markdown Conversion Does Not Remove Prompt Injection](../support-briefs/M11-S2.md) — Why can an instruction attempt survive a change of file format?
+- [M11-S3: Review AI Actions After Reading External Documents](../support-briefs/M11-S3.md) — What should a reader check before allowing actions derived from a document?
+
+## Evidence and source plan
+
+Source IDs: SRC-OWASP, SRC-INJECTION. Resolve them in [sources.json](../sources.json). Product-specific behavior requires the current app/code and an original sample, not a competitor feature list. Reuse the supports’ tested fixtures to avoid inventing separate demonstrations.
+
+- M11-S1: Inert local excerpt asking for an unrelated summary style, clearly labeled illustrative; no secret extraction or live attack.
+- M11-S2: Harmless imperative preserved through an original text/document conversion; inspect strings only.
+- M11-S3: Paper exercise comparing summarize-only task with a source requesting an external action; no messages sent.
+
+## Visual plan
+
+Banner: illustrate this selected task with the current Prompt L identity, not a savings claim.
+
+1. An overview of the main workflow or numbered checks.
+2. A source-to-output comparison using the cluster fixture.
+3. A decision chart around the cluster’s scope boundary.
+4. A final inspection checklist with labels and a limitation.
+
+Each figure must use specific content from the draft. Review dark/light and narrow layout; four figures is not permission for decorative padding.
+
+## Linking and CTA
+
+Link to E08 only for relevant broader context; use short handoffs to the three supports. Do not link to unpublished URLs until included in a release. One contextual converter CTA is enough. For M11/M12, explain that LLMiser prepares text and does not enforce trust or document precedence.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/main-briefs/M12.md b/blog-pipeline/campaign/main-briefs/M12.md
new file mode 100644
index 0000000..53fc577
--- /dev/null
+++ b/blog-pipeline/campaign/main-briefs/M12.md
@@ -0,0 +1,57 @@
+# M12 — Why Two Versions of a Document Can Confuse AI
+
+Title: USER_SELECTED on 5 November 2026. Article: PROPOSED, not written or published.
+
+Metadata owner: [intent-registry.json](../../intent-registry.json), record `M12`. Preserve the selected title exactly. Category: misc. Parent context: E08.
+
+## Reader task and limits
+
+Document provenance/conflicts, not another generic RAG, hallucination or deduplication guide.
+
+Nearest owners: E05, M11. Explain the overview here, then send detailed troubleshooting to the three supports. Avoid reproducing their full procedures.
+
+## Outline
+
+1. Find the version conflict
+2. Preserve dates, provenance and scope
+3. Handle superseded versus simultaneously valid sources
+4. Resolve ambiguity without inventing precedence
+5. Remove stale excerpts from the working packet
+6. Test the answer against the chosen sources
+
+## Three supporting articles
+
+- [M12-S1: Label Document Versions Before Building AI Context](../support-briefs/M12-S1.md) — Which provenance fields distinguish two versions of a source?
+- [M12-S2: Resolve Conflicting Policy Passages Before Asking AI](../support-briefs/M12-S2.md) — How do I handle two valid-looking passages with different scopes?
+- [M12-S3: Remove Stale Excerpts From an AI Context Packet](../support-briefs/M12-S3.md) — How do I update a manually assembled packet when a source changes?
+
+## Evidence and source plan
+
+Source IDs: SRC-RETRIEVAL. Resolve them in [sources.json](../sources.json). Product-specific behavior requires the current app/code and an original sample, not a competitor feature list. Reuse the supports’ tested fixtures to avoid inventing separate demonstrations.
+
+- M12-S1: Two synthetic policy revisions with filename, version and effective date, plus a stable source ID.
+- M12-S2: Two fictional company policies for different teams with different limits; no real legal interpretation.
+- M12-S3: Local packet containing old and new fictional deadlines; trace each excerpt to source revision.
+
+## Visual plan
+
+Banner: illustrate this selected task with the current Prompt L identity, not a savings claim.
+
+1. An overview of the main workflow or numbered checks.
+2. A source-to-output comparison using the cluster fixture.
+3. A decision chart around the cluster’s scope boundary.
+4. A final inspection checklist with labels and a limitation.
+
+Each figure must use specific content from the draft. Review dark/light and narrow layout; four figures is not permission for decorative padding.
+
+## Linking and CTA
+
+Link to E08 only for relevant broader context; use short handoffs to the three supports. Do not link to unpublished URLs until included in a release. One contextual converter CTA is enough. For M11/M12, explain that LLMiser prepares text and does not enforce trust or document precedence.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/manifest.json b/blog-pipeline/campaign/manifest.json
new file mode 100644
index 0000000..1b4f586
--- /dev/null
+++ b/blog-pipeline/campaign/manifest.json
@@ -0,0 +1,195 @@
+{
+ "updated": "2026-11-05",
+ "status": "PLANNED",
+ "main_ids": [
+ "M01",
+ "M02",
+ "M03",
+ "M04",
+ "M05",
+ "M06",
+ "M07",
+ "M08",
+ "M09",
+ "M10",
+ "M11",
+ "M12"
+ ],
+ "support_ids": [
+ "M01-S1",
+ "M01-S2",
+ "M01-S3",
+ "M02-S1",
+ "M02-S2",
+ "M02-S3",
+ "M03-S1",
+ "M03-S2",
+ "M03-S3",
+ "M04-S1",
+ "M04-S2",
+ "M04-S3",
+ "M05-S1",
+ "M05-S2",
+ "M05-S3",
+ "M06-S1",
+ "M06-S2",
+ "M06-S3",
+ "M07-S1",
+ "M07-S2",
+ "M07-S3",
+ "M08-S1",
+ "M08-S2",
+ "M08-S3",
+ "M09-S1",
+ "M09-S2",
+ "M09-S3",
+ "M10-S1",
+ "M10-S2",
+ "M10-S3",
+ "M11-S1",
+ "M11-S2",
+ "M11-S3",
+ "M12-S1",
+ "M12-S2",
+ "M12-S3"
+ ],
+ "post_ids": [
+ "M01-S1-P1",
+ "M01-S1-P2",
+ "M01-S1-P3",
+ "M01-S2-P1",
+ "M01-S2-P2",
+ "M01-S2-P3",
+ "M01-S3-P1",
+ "M01-S3-P2",
+ "M01-S3-P3",
+ "M02-S1-P1",
+ "M02-S1-P2",
+ "M02-S1-P3",
+ "M02-S2-P1",
+ "M02-S2-P2",
+ "M02-S2-P3",
+ "M02-S3-P1",
+ "M02-S3-P2",
+ "M02-S3-P3",
+ "M03-S1-P1",
+ "M03-S1-P2",
+ "M03-S1-P3",
+ "M03-S2-P1",
+ "M03-S2-P2",
+ "M03-S2-P3",
+ "M03-S3-P1",
+ "M03-S3-P2",
+ "M03-S3-P3",
+ "M04-S1-P1",
+ "M04-S1-P2",
+ "M04-S1-P3",
+ "M04-S2-P1",
+ "M04-S2-P2",
+ "M04-S2-P3",
+ "M04-S3-P1",
+ "M04-S3-P2",
+ "M04-S3-P3",
+ "M05-S1-P1",
+ "M05-S1-P2",
+ "M05-S1-P3",
+ "M05-S2-P1",
+ "M05-S2-P2",
+ "M05-S2-P3",
+ "M05-S3-P1",
+ "M05-S3-P2",
+ "M05-S3-P3",
+ "M06-S1-P1",
+ "M06-S1-P2",
+ "M06-S1-P3",
+ "M06-S2-P1",
+ "M06-S2-P2",
+ "M06-S2-P3",
+ "M06-S3-P1",
+ "M06-S3-P2",
+ "M06-S3-P3",
+ "M07-S1-P1",
+ "M07-S1-P2",
+ "M07-S1-P3",
+ "M07-S2-P1",
+ "M07-S2-P2",
+ "M07-S2-P3",
+ "M07-S3-P1",
+ "M07-S3-P2",
+ "M07-S3-P3",
+ "M08-S1-P1",
+ "M08-S1-P2",
+ "M08-S1-P3",
+ "M08-S2-P1",
+ "M08-S2-P2",
+ "M08-S2-P3",
+ "M08-S3-P1",
+ "M08-S3-P2",
+ "M08-S3-P3",
+ "M09-S1-P1",
+ "M09-S1-P2",
+ "M09-S1-P3",
+ "M09-S2-P1",
+ "M09-S2-P2",
+ "M09-S2-P3",
+ "M09-S3-P1",
+ "M09-S3-P2",
+ "M09-S3-P3",
+ "M10-S1-P1",
+ "M10-S1-P2",
+ "M10-S1-P3",
+ "M10-S2-P1",
+ "M10-S2-P2",
+ "M10-S2-P3",
+ "M10-S3-P1",
+ "M10-S3-P2",
+ "M10-S3-P3",
+ "M11-S1-P1",
+ "M11-S1-P2",
+ "M11-S1-P3",
+ "M11-S2-P1",
+ "M11-S2-P2",
+ "M11-S2-P3",
+ "M11-S3-P1",
+ "M11-S3-P2",
+ "M11-S3-P3",
+ "M12-S1-P1",
+ "M12-S1-P2",
+ "M12-S1-P3",
+ "M12-S2-P1",
+ "M12-S2-P2",
+ "M12-S2-P3",
+ "M12-S3-P1",
+ "M12-S3-P2",
+ "M12-S3-P3"
+ ],
+ "categories": {
+ "M01": "listicle",
+ "M02": "listicle",
+ "M03": "listicle",
+ "M04": "listicle",
+ "M05": "listicle",
+ "M06": "listicle",
+ "M07": "product",
+ "M08": "product",
+ "M09": "product",
+ "M10": "product",
+ "M11": "misc",
+ "M12": "misc"
+ },
+ "listicle_item_counts": {
+ "M01": 7,
+ "M02": 9,
+ "M03": 7,
+ "M04": 6,
+ "M05": 8,
+ "M06": 7
+ },
+ "main_count": 12,
+ "supports_per_main": 3,
+ "posts_per_support": 3,
+ "support_count": 36,
+ "post_count": 108,
+ "content_drafts_completed": 0,
+ "published_assets": 0
+}
diff --git a/blog-pipeline/campaign/post-briefs/M01-S1.md b/blog-pipeline/campaign/post-briefs/M01-S1.md
new file mode 100644
index 0000000..a355e0c
--- /dev/null
+++ b/blog-pipeline/campaign/post-briefs/M01-S1.md
@@ -0,0 +1,63 @@
+# Three post briefs for M01-S1
+
+Support: [Check a Project ZIP for Secrets Before Sharing It](../support-briefs/M01-S1.md). Status: PROPOSED BRIEFS, not final copy and not published. Final platform/account and format constraints must be checked before writing.
+
+## M01-S1-P1 — Practical walkthrough
+
+Opening idea: **A renamed .env file is still sensitive**
+
+Suggested channels: LinkedIn. Actual channel: unassigned.
+
+Content beats:
+
+- Open with the specific review problem: How do I review a sharing copy for credentials and private data?
+- Give an actionable sequence: Locate configuration and logs; Inspect an extracted sharing copy; Remove sensitive material and recheck
+- State the limit: Do not use real secrets or imply the converter detects credentials.
+
+Visual: Decision/checklist tied to Locate configuration and logs. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Toy repo with clearly fake keys, a synthetic log and harmless config. Compare the original and sharing inventory.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/project-zip-secret-review`. UTM content: `m01-s1-p1`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M01-S1-P2 — Annotated example
+
+Opening idea: **Show a sharing-copy review checklist**
+
+Suggested channels: LinkedIn carousel, Instagram carousel. Actual channel: unassigned.
+
+Content beats:
+
+- Introduce the original fixture: Toy repo with clearly fake keys, a synthetic log and harmless config. Compare the original and sharing inventory.
+- Show the relevant source and actual output side by side; label expected output separately until tested
+- Point out one discrepancy or confirmed match and the next review step
+
+Visual: Annotated source/output fixture comparison. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Toy repo with clearly fake keys, a synthetic log and harmless config. Compare the original and sharing inventory.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/project-zip-secret-review`. UTM content: `m01-s1-p2`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M01-S1-P3 — Misconception and limitation
+
+Opening idea: **Removing a filename is not a secret scan**
+
+Suggested channels: X, Threads. Actual channel: unassigned.
+
+Content beats:
+
+- Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result
+- Explain the boundary: Do not use real secrets or imply the converter detects credentials.
+- Offer a concrete check: Remove sensitive material and recheck
+
+Visual: Two-panel assumption versus verification boundary. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Toy repo with clearly fake keys, a synthetic log and harmless config. Compare the original and sharing inventory.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/project-zip-secret-review`. UTM content: `m01-s1-p3`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
diff --git a/blog-pipeline/campaign/post-briefs/M01-S2.md b/blog-pipeline/campaign/post-briefs/M01-S2.md
new file mode 100644
index 0000000..fde7e21
--- /dev/null
+++ b/blog-pipeline/campaign/post-briefs/M01-S2.md
@@ -0,0 +1,63 @@
+# Three post briefs for M01-S2
+
+Support: [Which Dependency Files Should You Keep for AI Review?](../support-briefs/M01-S2.md). Status: PROPOSED BRIEFS, not final copy and not published. Final platform/account and format constraints must be checked before writing.
+
+## M01-S2-P1 — Practical walkthrough
+
+Opening idea: **Keep the dependency map, review the bulk**
+
+Suggested channels: LinkedIn. Actual channel: unassigned.
+
+Content beats:
+
+- Open with the specific review problem: What should remain when installed packages are removed?
+- Give an actionable sequence: Separate manifests from installed packages; Match files to the review question; Keep version context
+- State the limit: Do not prescribe removing all lockfiles or all vendored source.
+
+Visual: Decision/checklist tied to Separate manifests from installed packages. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Toy project with package manifest, lockfile, vendor folder and import requiring version context.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/dependency-files-ai-review`. UTM content: `m01-s2-p1`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M01-S2-P2 — Annotated example
+
+Opening idea: **Compare a manifest with an installed package tree**
+
+Suggested channels: LinkedIn carousel, Instagram carousel. Actual channel: unassigned.
+
+Content beats:
+
+- Introduce the original fixture: Toy project with package manifest, lockfile, vendor folder and import requiring version context.
+- Show the relevant source and actual output side by side; label expected output separately until tested
+- Point out one discrepancy or confirmed match and the next review step
+
+Visual: Annotated source/output fixture comparison. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Toy project with package manifest, lockfile, vendor folder and import requiring version context.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/dependency-files-ai-review`. UTM content: `m01-s2-p2`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M01-S2-P3 — Misconception and limitation
+
+Opening idea: **When vendored code is the code under review**
+
+Suggested channels: X, Threads. Actual channel: unassigned.
+
+Content beats:
+
+- Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result
+- Explain the boundary: Do not prescribe removing all lockfiles or all vendored source.
+- Offer a concrete check: Keep version context
+
+Visual: Two-panel assumption versus verification boundary. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Toy project with package manifest, lockfile, vendor folder and import requiring version context.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/dependency-files-ai-review`. UTM content: `m01-s2-p3`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
diff --git a/blog-pipeline/campaign/post-briefs/M01-S3.md b/blog-pipeline/campaign/post-briefs/M01-S3.md
new file mode 100644
index 0000000..aecd3ee
--- /dev/null
+++ b/blog-pipeline/campaign/post-briefs/M01-S3.md
@@ -0,0 +1,63 @@
+# Three post briefs for M01-S3
+
+Support: [Build a Task-Focused Code Bundle With Tests](../support-briefs/M01-S3.md). Status: PROPOSED BRIEFS, not final copy and not published. Final platform/account and format constraints must be checked before writing.
+
+## M01-S3-P1 — Practical walkthrough
+
+Opening idea: **One bug can span more than one file**
+
+Suggested channels: LinkedIn. Actual channel: unassigned.
+
+Content beats:
+
+- Open with the specific review problem: How do I select enough source and tests for one code question?
+- Give an actionable sequence: Define the question; Trace relevant imports and tests; Review omissions
+- State the limit: No universal file-count or answer-quality improvement promise.
+
+Visual: Decision/checklist tied to Define the question. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Toy bug spanning a caller, helper and test; compare a minimal sufficient bundle with an incomplete one.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/task-focused-code-bundle`. UTM content: `m01-s3-p1`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M01-S3-P2 — Annotated example
+
+Opening idea: **Show the caller-helper-test evidence chain**
+
+Suggested channels: LinkedIn carousel, Instagram carousel. Actual channel: unassigned.
+
+Content beats:
+
+- Introduce the original fixture: Toy bug spanning a caller, helper and test; compare a minimal sufficient bundle with an incomplete one.
+- Show the relevant source and actual output side by side; label expected output separately until tested
+- Point out one discrepancy or confirmed match and the next review step
+
+Visual: Annotated source/output fixture comparison. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Toy bug spanning a caller, helper and test; compare a minimal sufficient bundle with an incomplete one.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/task-focused-code-bundle`. UTM content: `m01-s3-p2`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M01-S3-P3 — Misconception and limitation
+
+Opening idea: **Smallest is not always sufficient**
+
+Suggested channels: X, Threads. Actual channel: unassigned.
+
+Content beats:
+
+- Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result
+- Explain the boundary: No universal file-count or answer-quality improvement promise.
+- Offer a concrete check: Review omissions
+
+Visual: Two-panel assumption versus verification boundary. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Toy bug spanning a caller, helper and test; compare a minimal sufficient bundle with an incomplete one.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/task-focused-code-bundle`. UTM content: `m01-s3-p3`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
diff --git a/blog-pipeline/campaign/post-briefs/M02-S1.md b/blog-pipeline/campaign/post-briefs/M02-S1.md
new file mode 100644
index 0000000..f79383e
--- /dev/null
+++ b/blog-pipeline/campaign/post-briefs/M02-S1.md
@@ -0,0 +1,63 @@
+# Three post briefs for M02-S1
+
+Support: [Check Rotated Scans Before Running OCR](../support-briefs/M02-S1.md). Status: PROPOSED BRIEFS, not final copy and not published. Final platform/account and format constraints must be checked before writing.
+
+## M02-S1-P1 — Practical walkthrough
+
+Opening idea: **A readable scan can still face the wrong way**
+
+Suggested channels: LinkedIn. Actual channel: unassigned.
+
+Content beats:
+
+- Open with the specific review problem: How does orientation affect recognition in a specific sample?
+- Give an actionable sequence: Inspect orientation; Compare original and corrected copy; Check output against both
+- State the limit: Do not claim LLMiser always corrects rotation automatically.
+
+Visual: Decision/checklist tied to Inspect orientation. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Synthetic English image at 0 and 90 degrees, plus a carefully rotated copy; save actual outputs.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/rotated-scan-ocr-check`. UTM content: `m02-s1-p1`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M02-S1-P2 — Annotated example
+
+Opening idea: **Compare orientation using one controlled sample**
+
+Suggested channels: LinkedIn carousel, Instagram carousel. Actual channel: unassigned.
+
+Content beats:
+
+- Introduce the original fixture: Synthetic English image at 0 and 90 degrees, plus a carefully rotated copy; save actual outputs.
+- Show the relevant source and actual output side by side; label expected output separately until tested
+- Point out one discrepancy or confirmed match and the next review step
+
+Visual: Annotated source/output fixture comparison. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Synthetic English image at 0 and 90 degrees, plus a carefully rotated copy; save actual outputs.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/rotated-scan-ocr-check`. UTM content: `m02-s1-p2`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M02-S1-P3 — Misconception and limitation
+
+Opening idea: **Rotation and blur need different checks**
+
+Suggested channels: X, Threads. Actual channel: unassigned.
+
+Content beats:
+
+- Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result
+- Explain the boundary: Do not claim LLMiser always corrects rotation automatically.
+- Offer a concrete check: Check output against both
+
+Visual: Two-panel assumption versus verification boundary. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Synthetic English image at 0 and 90 degrees, plus a carefully rotated copy; save actual outputs.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/rotated-scan-ocr-check`. UTM content: `m02-s1-p3`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
diff --git a/blog-pipeline/campaign/post-briefs/M02-S2.md b/blog-pipeline/campaign/post-briefs/M02-S2.md
new file mode 100644
index 0000000..812c747
--- /dev/null
+++ b/blog-pipeline/campaign/post-briefs/M02-S2.md
@@ -0,0 +1,63 @@
+# Three post briefs for M02-S2
+
+Support: [Verify Numbers and Identifiers in OCR Output](../support-briefs/M02-S2.md). Status: PROPOSED BRIEFS, not final copy and not published. Final platform/account and format constraints must be checked before writing.
+
+## M02-S2-P1 — Practical walkthrough
+
+Opening idea: **A single zero can change the meaning**
+
+Suggested channels: LinkedIn. Actual channel: unassigned.
+
+Content beats:
+
+- Open with the specific review problem: How do I verify digits and labels without trusting fluent OCR text?
+- Give an actionable sequence: Locate high-impact fields; Compare exact characters and separators; Record corrections
+- State the limit: No financial recommendation; report character fidelity, not invented accuracy rates.
+
+Visual: Decision/checklist tied to Locate high-impact fields. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Synthetic invoice with 00123, 10.50, a date and letter O/zero examples.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/verify-ocr-numbers`. UTM content: `m02-s2-p1`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M02-S2-P2 — Annotated example
+
+Opening idea: **Use a source-to-output number checklist**
+
+Suggested channels: LinkedIn carousel, Instagram carousel. Actual channel: unassigned.
+
+Content beats:
+
+- Introduce the original fixture: Synthetic invoice with 00123, 10.50, a date and letter O/zero examples.
+- Show the relevant source and actual output side by side; label expected output separately until tested
+- Point out one discrepancy or confirmed match and the next review step
+
+Visual: Annotated source/output fixture comparison. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Synthetic invoice with 00123, 10.50, a date and letter O/zero examples.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/verify-ocr-numbers`. UTM content: `m02-s2-p2`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M02-S2-P3 — Misconception and limitation
+
+Opening idea: **Fluent text is not verified data**
+
+Suggested channels: X, Threads. Actual channel: unassigned.
+
+Content beats:
+
+- Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result
+- Explain the boundary: No financial recommendation; report character fidelity, not invented accuracy rates.
+- Offer a concrete check: Record corrections
+
+Visual: Two-panel assumption versus verification boundary. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Synthetic invoice with 00123, 10.50, a date and letter O/zero examples.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/verify-ocr-numbers`. UTM content: `m02-s2-p3`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
diff --git a/blog-pipeline/campaign/post-briefs/M02-S3.md b/blog-pipeline/campaign/post-briefs/M02-S3.md
new file mode 100644
index 0000000..89a152c
--- /dev/null
+++ b/blog-pipeline/campaign/post-briefs/M02-S3.md
@@ -0,0 +1,63 @@
+# Three post briefs for M02-S3
+
+Support: [Check OCR Coverage in a Mixed PDF](../support-briefs/M02-S3.md). Status: PROPOSED BRIEFS, not final copy and not published. Final platform/account and format constraints must be checked before writing.
+
+## M02-S3-P1 — Practical walkthrough
+
+Opening idea: **Did every meaningful page make it through?**
+
+Suggested channels: LinkedIn. Actual channel: unassigned.
+
+Content beats:
+
+- Open with the specific review problem: How do I confirm that a PDF with text and scanned pages is represented?
+- Give an actionable sequence: Inventory page types; Locate each page in output; Investigate missing or duplicate text
+- State the limit: No page-level OCR routing or page-count guarantee without observed evidence.
+
+Visual: Decision/checklist tied to Inventory page types. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Three-page fixture with native text, image-only text and an intentional blank page.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/mixed-pdf-ocr-coverage`. UTM content: `m02-s3-p1`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M02-S3-P2 — Annotated example
+
+Opening idea: **Map three source pages to output passages**
+
+Suggested channels: LinkedIn carousel, Instagram carousel. Actual channel: unassigned.
+
+Content beats:
+
+- Introduce the original fixture: Three-page fixture with native text, image-only text and an intentional blank page.
+- Show the relevant source and actual output side by side; label expected output separately until tested
+- Point out one discrepancy or confirmed match and the next review step
+
+Visual: Annotated source/output fixture comparison. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Three-page fixture with native text, image-only text and an intentional blank page.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/mixed-pdf-ocr-coverage`. UTM content: `m02-s3-p2`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M02-S3-P3 — Misconception and limitation
+
+Opening idea: **A blank page differs from a missing page**
+
+Suggested channels: X, Threads. Actual channel: unassigned.
+
+Content beats:
+
+- Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result
+- Explain the boundary: No page-level OCR routing or page-count guarantee without observed evidence.
+- Offer a concrete check: Investigate missing or duplicate text
+
+Visual: Two-panel assumption versus verification boundary. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Three-page fixture with native text, image-only text and an intentional blank page.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/mixed-pdf-ocr-coverage`. UTM content: `m02-s3-p3`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
diff --git a/blog-pipeline/campaign/post-briefs/M03-S1.md b/blog-pipeline/campaign/post-briefs/M03-S1.md
new file mode 100644
index 0000000..ed56679
--- /dev/null
+++ b/blog-pipeline/campaign/post-briefs/M03-S1.md
@@ -0,0 +1,63 @@
+# Three post briefs for M03-S1
+
+Support: [Keep Leading Zeros When Preparing Excel Data for AI](../support-briefs/M03-S1.md). Status: PROPOSED BRIEFS, not final copy and not published. Final platform/account and format constraints must be checked before writing.
+
+## M03-S1-P1 — Practical walkthrough
+
+Opening idea: **00123 and 123 may name different records**
+
+Suggested channels: LinkedIn. Actual channel: unassigned.
+
+Content beats:
+
+- Open with the specific review problem: How do I distinguish identifiers from numeric quantities?
+- Give an actionable sequence: Identify identifier columns; Inspect stored value versus formatting; Compare converted output
+- State the limit: Display formatting and stored values may differ; conversion cannot restore lost digits.
+
+Visual: Decision/checklist tied to Identify identifier columns. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Workbook with text 00123, numeric 123 formatted as 00000 and a long ID.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/excel-leading-zeros-ai`. UTM content: `m03-s1-p1`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M03-S1-P2 — Annotated example
+
+Opening idea: **Compare text IDs with formatted numbers**
+
+Suggested channels: LinkedIn carousel, Instagram carousel. Actual channel: unassigned.
+
+Content beats:
+
+- Introduce the original fixture: Workbook with text 00123, numeric 123 formatted as 00000 and a long ID.
+- Show the relevant source and actual output side by side; label expected output separately until tested
+- Point out one discrepancy or confirmed match and the next review step
+
+Visual: Annotated source/output fixture comparison. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Workbook with text 00123, numeric 123 formatted as 00000 and a long ID.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/excel-leading-zeros-ai`. UTM content: `m03-s1-p2`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M03-S1-P3 — Misconception and limitation
+
+Opening idea: **Formatting is not the stored value**
+
+Suggested channels: X, Threads. Actual channel: unassigned.
+
+Content beats:
+
+- Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result
+- Explain the boundary: Display formatting and stored values may differ; conversion cannot restore lost digits.
+- Offer a concrete check: Compare converted output
+
+Visual: Two-panel assumption versus verification boundary. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Workbook with text 00123, numeric 123 formatted as 00000 and a long ID.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/excel-leading-zeros-ai`. UTM content: `m03-s1-p3`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
diff --git a/blog-pipeline/campaign/post-briefs/M03-S2.md b/blog-pipeline/campaign/post-briefs/M03-S2.md
new file mode 100644
index 0000000..ff78d32
--- /dev/null
+++ b/blog-pipeline/campaign/post-briefs/M03-S2.md
@@ -0,0 +1,63 @@
+# Three post briefs for M03-S2
+
+Support: [Check Excel Formula Results Before Conversion](../support-briefs/M03-S2.md). Status: PROPOSED BRIEFS, not final copy and not published. Final platform/account and format constraints must be checked before writing.
+
+## M03-S2-P1 — Practical walkthrough
+
+Opening idea: **A formula is not proof of a fresh result**
+
+Suggested channels: LinkedIn. Actual channel: unassigned.
+
+Content beats:
+
+- Open with the specific review problem: What evidence shows whether formula results are current?
+- Give an actionable sequence: Separate formulas from calculated values; Save a reviewed source copy; Inspect actual Markdown values
+- State the limit: Do not claim the converter recalculates formulas; record app and workbook provenance.
+
+Visual: Decision/checklist tied to Separate formulas from calculated values. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Workbook with formula, known result and a stale/absent cached-value case where reproducible.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/excel-formula-results-conversion`. UTM content: `m03-s2-p1`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M03-S2-P2 — Annotated example
+
+Opening idea: **Trace formula, saved value and Markdown output**
+
+Suggested channels: LinkedIn carousel, Instagram carousel. Actual channel: unassigned.
+
+Content beats:
+
+- Introduce the original fixture: Workbook with formula, known result and a stale/absent cached-value case where reproducible.
+- Show the relevant source and actual output side by side; label expected output separately until tested
+- Point out one discrepancy or confirmed match and the next review step
+
+Visual: Annotated source/output fixture comparison. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Workbook with formula, known result and a stale/absent cached-value case where reproducible.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/excel-formula-results-conversion`. UTM content: `m03-s2-p2`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M03-S2-P3 — Misconception and limitation
+
+Opening idea: **Conversion is not spreadsheet recalculation**
+
+Suggested channels: X, Threads. Actual channel: unassigned.
+
+Content beats:
+
+- Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result
+- Explain the boundary: Do not claim the converter recalculates formulas; record app and workbook provenance.
+- Offer a concrete check: Inspect actual Markdown values
+
+Visual: Two-panel assumption versus verification boundary. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Workbook with formula, known result and a stale/absent cached-value case where reproducible.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/excel-formula-results-conversion`. UTM content: `m03-s2-p3`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
diff --git a/blog-pipeline/campaign/post-briefs/M03-S3.md b/blog-pipeline/campaign/post-briefs/M03-S3.md
new file mode 100644
index 0000000..7b3b88e
--- /dev/null
+++ b/blog-pipeline/campaign/post-briefs/M03-S3.md
@@ -0,0 +1,63 @@
+# Three post briefs for M03-S3
+
+Support: [Prepare Merged Excel Headers for Markdown Tables](../support-briefs/M03-S3.md). Status: PROPOSED BRIEFS, not final copy and not published. Final platform/account and format constraints must be checked before writing.
+
+## M03-S3-P1 — Practical walkthrough
+
+Opening idea: **Which unit belongs to this column?**
+
+Suggested channels: LinkedIn. Actual channel: unassigned.
+
+Content beats:
+
+- Open with the specific review problem: How can I make multi-level spreadsheet labels unambiguous?
+- Give an actionable sequence: Identify grouped labels; Create a clearly labeled sharing copy; Compare row-column meaning
+- State the limit: Manual flattening must preserve meaning; no automatic merged-cell repair claim.
+
+Visual: Decision/checklist tied to Identify grouped labels. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Small two-level header workbook and manually flattened copy with units retained.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/merged-excel-headers-markdown`. UTM content: `m03-s3-p1`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M03-S3-P2 — Annotated example
+
+Opening idea: **Before-and-after header map with real values**
+
+Suggested channels: LinkedIn carousel, Instagram carousel. Actual channel: unassigned.
+
+Content beats:
+
+- Introduce the original fixture: Small two-level header workbook and manually flattened copy with units retained.
+- Show the relevant source and actual output side by side; label expected output separately until tested
+- Point out one discrepancy or confirmed match and the next review step
+
+Visual: Annotated source/output fixture comparison. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Small two-level header workbook and manually flattened copy with units retained.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/merged-excel-headers-markdown`. UTM content: `m03-s3-p2`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M03-S3-P3 — Misconception and limitation
+
+Opening idea: **Blank merged cells do not mean missing data**
+
+Suggested channels: X, Threads. Actual channel: unassigned.
+
+Content beats:
+
+- Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result
+- Explain the boundary: Manual flattening must preserve meaning; no automatic merged-cell repair claim.
+- Offer a concrete check: Compare row-column meaning
+
+Visual: Two-panel assumption versus verification boundary. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Small two-level header workbook and manually flattened copy with units retained.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/merged-excel-headers-markdown`. UTM content: `m03-s3-p3`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
diff --git a/blog-pipeline/campaign/post-briefs/M04-S1.md b/blog-pipeline/campaign/post-briefs/M04-S1.md
new file mode 100644
index 0000000..8c0db77
--- /dev/null
+++ b/blog-pipeline/campaign/post-briefs/M04-S1.md
@@ -0,0 +1,63 @@
+# Three post briefs for M04-S1
+
+Support: [Use Word Heading Styles Before Markdown Conversion](../support-briefs/M04-S1.md). Status: PROPOSED BRIEFS, not final copy and not published. Final platform/account and format constraints must be checked before writing.
+
+## M04-S1-P1 — Practical walkthrough
+
+Opening idea: **Bold text and a heading are different inputs**
+
+Suggested channels: LinkedIn. Actual channel: unassigned.
+
+Content beats:
+
+- Open with the specific review problem: How do semantic styles differ from large bold text?
+- Give an actionable sequence: Inspect Word styles; Apply a consistent hierarchy; Check Markdown heading levels
+- State the limit: General semantic-heading sources do not prove exact DOCX parser behavior; test it.
+
+Visual: Decision/checklist tied to Inspect Word styles. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: DOCX pair with visually similar bold text versus actual heading styles.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/word-heading-styles-markdown`. UTM content: `m04-s1-p1`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M04-S1-P2 — Annotated example
+
+Opening idea: **Compare look-alike headings after conversion**
+
+Suggested channels: LinkedIn carousel, Instagram carousel. Actual channel: unassigned.
+
+Content beats:
+
+- Introduce the original fixture: DOCX pair with visually similar bold text versus actual heading styles.
+- Show the relevant source and actual output side by side; label expected output separately until tested
+- Point out one discrepancy or confirmed match and the next review step
+
+Visual: Annotated source/output fixture comparison. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: DOCX pair with visually similar bold text versus actual heading styles.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/word-heading-styles-markdown`. UTM content: `m04-s1-p2`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M04-S1-P3 — Misconception and limitation
+
+Opening idea: **Check hierarchy rather than font size**
+
+Suggested channels: X, Threads. Actual channel: unassigned.
+
+Content beats:
+
+- Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result
+- Explain the boundary: General semantic-heading sources do not prove exact DOCX parser behavior; test it.
+- Offer a concrete check: Check Markdown heading levels
+
+Visual: Two-panel assumption versus verification boundary. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: DOCX pair with visually similar bold text versus actual heading styles.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/word-heading-styles-markdown`. UTM content: `m04-s1-p3`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
diff --git a/blog-pipeline/campaign/post-briefs/M04-S2.md b/blog-pipeline/campaign/post-briefs/M04-S2.md
new file mode 100644
index 0000000..297dae7
--- /dev/null
+++ b/blog-pipeline/campaign/post-briefs/M04-S2.md
@@ -0,0 +1,63 @@
+# Three post briefs for M04-S2
+
+Support: [Check Nested Word Lists in Markdown Output](../support-briefs/M04-S2.md). Status: PROPOSED BRIEFS, not final copy and not published. Final platform/account and format constraints must be checked before writing.
+
+## M04-S2-P1 — Practical walkthrough
+
+Opening idea: **A sub-step should not become a new instruction**
+
+Suggested channels: LinkedIn. Actual channel: unassigned.
+
+Content beats:
+
+- Open with the specific review problem: How do I verify parent-child relationships in converted lists?
+- Give an actionable sequence: Identify list levels; Compare item order and nesting; Repair a working copy and recheck
+- State the limit: Do not promise lossless numbering; preserve the original.
+
+Visual: Decision/checklist tied to Identify list levels. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: DOCX with nested numbered and bulleted items, including restarted numbering.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/nested-word-lists-markdown`. UTM content: `m04-s2-p1`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M04-S2-P2 — Annotated example
+
+Opening idea: **Map a parent item to its child steps**
+
+Suggested channels: LinkedIn carousel, Instagram carousel. Actual channel: unassigned.
+
+Content beats:
+
+- Introduce the original fixture: DOCX with nested numbered and bulleted items, including restarted numbering.
+- Show the relevant source and actual output side by side; label expected output separately until tested
+- Point out one discrepancy or confirmed match and the next review step
+
+Visual: Annotated source/output fixture comparison. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: DOCX with nested numbered and bulleted items, including restarted numbering.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/nested-word-lists-markdown`. UTM content: `m04-s2-p2`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M04-S2-P3 — Misconception and limitation
+
+Opening idea: **Correct words can have the wrong nesting**
+
+Suggested channels: X, Threads. Actual channel: unassigned.
+
+Content beats:
+
+- Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result
+- Explain the boundary: Do not promise lossless numbering; preserve the original.
+- Offer a concrete check: Repair a working copy and recheck
+
+Visual: Two-panel assumption versus verification boundary. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: DOCX with nested numbered and bulleted items, including restarted numbering.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/nested-word-lists-markdown`. UTM content: `m04-s2-p3`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
diff --git a/blog-pipeline/campaign/post-briefs/M04-S3.md b/blog-pipeline/campaign/post-briefs/M04-S3.md
new file mode 100644
index 0000000..3317623
--- /dev/null
+++ b/blog-pipeline/campaign/post-briefs/M04-S3.md
@@ -0,0 +1,63 @@
+# Three post briefs for M04-S3
+
+Support: [Prepare Word Revisions and Comments for AI Sharing](../support-briefs/M04-S3.md). Status: PROPOSED BRIEFS, not final copy and not published. Final platform/account and format constraints must be checked before writing.
+
+## M04-S3-P1 — Practical walkthrough
+
+Opening idea: **Which draft did you mean to share?**
+
+Suggested channels: LinkedIn. Actual channel: unassigned.
+
+Content beats:
+
+- Open with the specific review problem: Which revision view and comments should a shared document represent?
+- Give an actionable sequence: Decide the intended revision; Create a reviewed sharing copy; Compare extracted text with that copy
+- State the limit: Do not silently accept changes or claim all comments are extracted/removed.
+
+Visual: Decision/checklist tied to Decide the intended revision. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Synthetic DOCX containing a harmless tracked replacement and comment; record the chosen revision view.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/word-revisions-ai-sharing`. UTM content: `m04-s3-p1`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M04-S3-P2 — Annotated example
+
+Opening idea: **Compare original, revised and sharing views**
+
+Suggested channels: LinkedIn carousel, Instagram carousel. Actual channel: unassigned.
+
+Content beats:
+
+- Introduce the original fixture: Synthetic DOCX containing a harmless tracked replacement and comment; record the chosen revision view.
+- Show the relevant source and actual output side by side; label expected output separately until tested
+- Point out one discrepancy or confirmed match and the next review step
+
+Visual: Annotated source/output fixture comparison. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Synthetic DOCX containing a harmless tracked replacement and comment; record the chosen revision view.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/word-revisions-ai-sharing`. UTM content: `m04-s3-p2`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M04-S3-P3 — Misconception and limitation
+
+Opening idea: **Hidden review text needs an explicit decision**
+
+Suggested channels: X, Threads. Actual channel: unassigned.
+
+Content beats:
+
+- Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result
+- Explain the boundary: Do not silently accept changes or claim all comments are extracted/removed.
+- Offer a concrete check: Compare extracted text with that copy
+
+Visual: Two-panel assumption versus verification boundary. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Synthetic DOCX containing a harmless tracked replacement and comment; record the chosen revision view.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/word-revisions-ai-sharing`. UTM content: `m04-s3-p3`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
diff --git a/blog-pipeline/campaign/post-briefs/M05-S1.md b/blog-pipeline/campaign/post-briefs/M05-S1.md
new file mode 100644
index 0000000..fde0fee
--- /dev/null
+++ b/blog-pipeline/campaign/post-briefs/M05-S1.md
@@ -0,0 +1,63 @@
+# Three post briefs for M05-S1
+
+Support: [Check PowerPoint Speaker Notes After Conversion](../support-briefs/M05-S1.md). Status: PROPOSED BRIEFS, not final copy and not published. Final platform/account and format constraints must be checked before writing.
+
+## M05-S1-P1 — Practical walkthrough
+
+Opening idea: **The slide may not contain the whole explanation**
+
+Suggested channels: LinkedIn. Actual channel: unassigned.
+
+Content beats:
+
+- Open with the specific review problem: Are important speaker notes represented in this output?
+- Give an actionable sequence: Inventory slides with notes; Compare slide text and note text; Provide missing context explicitly
+- State the limit: Notes extraction is a test question, not an advertised verified feature.
+
+Visual: Decision/checklist tied to Inventory slides with notes. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Three-slide deck with notes on one slide and no notes on another.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/powerpoint-speaker-notes-markdown`. UTM content: `m05-s1-p1`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M05-S1-P2 — Annotated example
+
+Opening idea: **Make a slide-text versus notes checklist**
+
+Suggested channels: LinkedIn carousel, Instagram carousel. Actual channel: unassigned.
+
+Content beats:
+
+- Introduce the original fixture: Three-slide deck with notes on one slide and no notes on another.
+- Show the relevant source and actual output side by side; label expected output separately until tested
+- Point out one discrepancy or confirmed match and the next review step
+
+Visual: Annotated source/output fixture comparison. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Three-slide deck with notes on one slide and no notes on another.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/powerpoint-speaker-notes-markdown`. UTM content: `m05-s1-p2`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M05-S1-P3 — Misconception and limitation
+
+Opening idea: **Do not assume notes survived conversion**
+
+Suggested channels: X, Threads. Actual channel: unassigned.
+
+Content beats:
+
+- Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result
+- Explain the boundary: Notes extraction is a test question, not an advertised verified feature.
+- Offer a concrete check: Provide missing context explicitly
+
+Visual: Two-panel assumption versus verification boundary. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Three-slide deck with notes on one slide and no notes on another.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/powerpoint-speaker-notes-markdown`. UTM content: `m05-s1-p3`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
diff --git a/blog-pipeline/campaign/post-briefs/M05-S2.md b/blog-pipeline/campaign/post-briefs/M05-S2.md
new file mode 100644
index 0000000..0158407
--- /dev/null
+++ b/blog-pipeline/campaign/post-briefs/M05-S2.md
@@ -0,0 +1,63 @@
+# Three post briefs for M05-S2
+
+Support: [Carry Chart Context From Slides Into AI Prompts](../support-briefs/M05-S2.md). Status: PROPOSED BRIEFS, not final copy and not published. Final platform/account and format constraints must be checked before writing.
+
+## M05-S2-P1 — Practical walkthrough
+
+Opening idea: **A chart title is not its data**
+
+Suggested channels: LinkedIn. Actual channel: unassigned.
+
+Content beats:
+
+- Open with the specific review problem: What chart information must accompany a text-only slide export?
+- Give an actionable sequence: Identify the question and chart evidence; Record axes units and legend; Keep the visual when needed
+- State the limit: Never infer values that were not readable or claim automatic chart understanding.
+
+Visual: Decision/checklist tied to Identify the question and chart evidence. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Original chart with labels, units and a visible trend; write a checked textual description.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/slide-chart-context-ai`. UTM content: `m05-s2-p1`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M05-S2-P2 — Annotated example
+
+Opening idea: **Show the labels a text description needs**
+
+Suggested channels: LinkedIn carousel, Instagram carousel. Actual channel: unassigned.
+
+Content beats:
+
+- Introduce the original fixture: Original chart with labels, units and a visible trend; write a checked textual description.
+- Show the relevant source and actual output side by side; label expected output separately until tested
+- Point out one discrepancy or confirmed match and the next review step
+
+Visual: Annotated source/output fixture comparison. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Original chart with labels, units and a visible trend; write a checked textual description.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/slide-chart-context-ai`. UTM content: `m05-s2-p2`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M05-S2-P3 — Misconception and limitation
+
+Opening idea: **Keep the chart when shape is the evidence**
+
+Suggested channels: X, Threads. Actual channel: unassigned.
+
+Content beats:
+
+- Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result
+- Explain the boundary: Never infer values that were not readable or claim automatic chart understanding.
+- Offer a concrete check: Keep the visual when needed
+
+Visual: Two-panel assumption versus verification boundary. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Original chart with labels, units and a visible trend; write a checked textual description.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/slide-chart-context-ai`. UTM content: `m05-s2-p3`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
diff --git a/blog-pipeline/campaign/post-briefs/M05-S3.md b/blog-pipeline/campaign/post-briefs/M05-S3.md
new file mode 100644
index 0000000..aaa1992
--- /dev/null
+++ b/blog-pipeline/campaign/post-briefs/M05-S3.md
@@ -0,0 +1,63 @@
+# Three post briefs for M05-S3
+
+Support: [Keep Slide Titles and Order Clear in Markdown](../support-briefs/M05-S3.md). Status: PROPOSED BRIEFS, not final copy and not published. Final platform/account and format constraints must be checked before writing.
+
+## M05-S3-P1 — Practical walkthrough
+
+Opening idea: **Repeated slide titles can hide a sequence change**
+
+Suggested channels: LinkedIn. Actual channel: unassigned.
+
+Content beats:
+
+- Open with the specific review problem: How do I retain the sequence needed to interpret a deck?
+- Give an actionable sequence: Map slide sequence; Check title-to-body association; Verify rearranged or repeated titles
+- State the limit: No artificial page/slide numbers unless traced to the source.
+
+Visual: Decision/checklist tied to Map slide sequence. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Deck with repeated titles, a section slide and a sequence-dependent explanation.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/slide-order-markdown`. UTM content: `m05-s3-p1`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M05-S3-P2 — Annotated example
+
+Opening idea: **Trace one narrative across three slides**
+
+Suggested channels: LinkedIn carousel, Instagram carousel. Actual channel: unassigned.
+
+Content beats:
+
+- Introduce the original fixture: Deck with repeated titles, a section slide and a sequence-dependent explanation.
+- Show the relevant source and actual output side by side; label expected output separately until tested
+- Point out one discrepancy or confirmed match and the next review step
+
+Visual: Annotated source/output fixture comparison. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Deck with repeated titles, a section slide and a sequence-dependent explanation.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/slide-order-markdown`. UTM content: `m05-s3-p2`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M05-S3-P3 — Misconception and limitation
+
+Opening idea: **Order is part of the context**
+
+Suggested channels: X, Threads. Actual channel: unassigned.
+
+Content beats:
+
+- Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result
+- Explain the boundary: No artificial page/slide numbers unless traced to the source.
+- Offer a concrete check: Verify rearranged or repeated titles
+
+Visual: Two-panel assumption versus verification boundary. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Deck with repeated titles, a section slide and a sequence-dependent explanation.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/slide-order-markdown`. UTM content: `m05-s3-p3`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
diff --git a/blog-pipeline/campaign/post-briefs/M06-S1.md b/blog-pipeline/campaign/post-briefs/M06-S1.md
new file mode 100644
index 0000000..bf602de
--- /dev/null
+++ b/blog-pipeline/campaign/post-briefs/M06-S1.md
@@ -0,0 +1,63 @@
+# Three post briefs for M06-S1
+
+Support: [Handle Commas and Quotes Inside CSV Cells](../support-briefs/M06-S1.md). Status: PROPOSED BRIEFS, not final copy and not published. Final platform/account and format constraints must be checked before writing.
+
+## M06-S1-P1 — Practical walkthrough
+
+Opening idea: **A comma inside a name is not a new column**
+
+Suggested channels: LinkedIn. Actual channel: unassigned.
+
+Content beats:
+
+- Open with the specific review problem: How do I verify that quoted separators remain inside a cell?
+- Give an actionable sequence: Identify separator and quoting; Test embedded commas and newlines; Check resulting row widths
+- State the limit: Do not recommend global comma replacement or splitting on commas without a CSV parser.
+
+Visual: Decision/checklist tied to Identify separator and quoting. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Synthetic CSV with comma inside quotes, escaped quote and embedded newline.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/csv-quoted-cells-markdown`. UTM content: `m06-s1-p1`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M06-S1-P2 — Annotated example
+
+Opening idea: **Show one quoted row and its expected cells**
+
+Suggested channels: LinkedIn carousel, Instagram carousel. Actual channel: unassigned.
+
+Content beats:
+
+- Introduce the original fixture: Synthetic CSV with comma inside quotes, escaped quote and embedded newline.
+- Show the relevant source and actual output side by side; label expected output separately until tested
+- Point out one discrepancy or confirmed match and the next review step
+
+Visual: Annotated source/output fixture comparison. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Synthetic CSV with comma inside quotes, escaped quote and embedded newline.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/csv-quoted-cells-markdown`. UTM content: `m06-s1-p2`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M06-S1-P3 — Misconception and limitation
+
+Opening idea: **Line breaks can belong inside one cell**
+
+Suggested channels: X, Threads. Actual channel: unassigned.
+
+Content beats:
+
+- Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result
+- Explain the boundary: Do not recommend global comma replacement or splitting on commas without a CSV parser.
+- Offer a concrete check: Check resulting row widths
+
+Visual: Two-panel assumption versus verification boundary. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Synthetic CSV with comma inside quotes, escaped quote and embedded newline.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/csv-quoted-cells-markdown`. UTM content: `m06-s1-p3`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
diff --git a/blog-pipeline/campaign/post-briefs/M06-S2.md b/blog-pipeline/campaign/post-briefs/M06-S2.md
new file mode 100644
index 0000000..d51573c
--- /dev/null
+++ b/blog-pipeline/campaign/post-briefs/M06-S2.md
@@ -0,0 +1,63 @@
+# Three post briefs for M06-S2
+
+Support: [Check CSV Encoding Before Sharing Text With AI](../support-briefs/M06-S2.md). Status: PROPOSED BRIEFS, not final copy and not published. Final platform/account and format constraints must be checked before writing.
+
+## M06-S2-P1 — Practical walkthrough
+
+Opening idea: **Broken accents are a data problem**
+
+Suggested channels: LinkedIn. Actual channel: unassigned.
+
+Content beats:
+
+- Open with the specific review problem: How can I diagnose corrupted text before using converted output?
+- Give an actionable sequence: Identify the source encoding; Compare representative characters; Export a verified copy
+- State the limit: Do not claim encoding detection is infallible or imply interface languages change OCR.
+
+Visual: Decision/checklist tied to Identify the source encoding. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: UTF-8 sample with accented names and a deliberately misdecoded demonstration; no personal data.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/csv-encoding-ai`. UTM content: `m06-s2-p1`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M06-S2-P2 — Annotated example
+
+Opening idea: **Compare the same characters before and after decoding**
+
+Suggested channels: LinkedIn carousel, Instagram carousel. Actual channel: unassigned.
+
+Content beats:
+
+- Introduce the original fixture: UTF-8 sample with accented names and a deliberately misdecoded demonstration; no personal data.
+- Show the relevant source and actual output side by side; label expected output separately until tested
+- Point out one discrepancy or confirmed match and the next review step
+
+Visual: Annotated source/output fixture comparison. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: UTF-8 sample with accented names and a deliberately misdecoded demonstration; no personal data.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/csv-encoding-ai`. UTM content: `m06-s2-p2`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M06-S2-P3 — Misconception and limitation
+
+Opening idea: **Changing the filename does not change encoding**
+
+Suggested channels: X, Threads. Actual channel: unassigned.
+
+Content beats:
+
+- Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result
+- Explain the boundary: Do not claim encoding detection is infallible or imply interface languages change OCR.
+- Offer a concrete check: Export a verified copy
+
+Visual: Two-panel assumption versus verification boundary. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: UTF-8 sample with accented names and a deliberately misdecoded demonstration; no personal data.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/csv-encoding-ai`. UTM content: `m06-s2-p3`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
diff --git a/blog-pipeline/campaign/post-briefs/M06-S3.md b/blog-pipeline/campaign/post-briefs/M06-S3.md
new file mode 100644
index 0000000..40a5ec1
--- /dev/null
+++ b/blog-pipeline/campaign/post-briefs/M06-S3.md
@@ -0,0 +1,63 @@
+# Three post briefs for M06-S3
+
+Support: [Distinguish Empty CSV Cells From Missing Fields](../support-briefs/M06-S3.md). Status: PROPOSED BRIEFS, not final copy and not published. Final platform/account and format constraints must be checked before writing.
+
+## M06-S3-P1 — Practical walkthrough
+
+Opening idea: **An empty cell is not a shifted column**
+
+Suggested channels: LinkedIn. Actual channel: unassigned.
+
+Content beats:
+
+- Open with the specific review problem: How do missing delimiters differ from intentionally blank values?
+- Give an actionable sequence: Define expected columns; Compare blank and absent fields; Validate a reviewed sample
+- State the limit: Keep missing-value decisions explicit; do not fill invented values.
+
+Visual: Decision/checklist tied to Define expected columns. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Rows with a blank middle cell, missing last field and extra delimiter.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/csv-empty-missing-fields`. UTM content: `m06-s3-p1`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M06-S3-P2 — Annotated example
+
+Opening idea: **Compare three rows with different shapes**
+
+Suggested channels: LinkedIn carousel, Instagram carousel. Actual channel: unassigned.
+
+Content beats:
+
+- Introduce the original fixture: Rows with a blank middle cell, missing last field and extra delimiter.
+- Show the relevant source and actual output side by side; label expected output separately until tested
+- Point out one discrepancy or confirmed match and the next review step
+
+Visual: Annotated source/output fixture comparison. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Rows with a blank middle cell, missing last field and extra delimiter.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/csv-empty-missing-fields`. UTM content: `m06-s3-p2`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M06-S3-P3 — Misconception and limitation
+
+Opening idea: **Do not guess what missing data should mean**
+
+Suggested channels: X, Threads. Actual channel: unassigned.
+
+Content beats:
+
+- Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result
+- Explain the boundary: Keep missing-value decisions explicit; do not fill invented values.
+- Offer a concrete check: Validate a reviewed sample
+
+Visual: Two-panel assumption versus verification boundary. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Rows with a blank middle cell, missing last field and extra delimiter.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/csv-empty-missing-fields`. UTM content: `m06-s3-p3`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
diff --git a/blog-pipeline/campaign/post-briefs/M07-S1.md b/blog-pipeline/campaign/post-briefs/M07-S1.md
new file mode 100644
index 0000000..0f2611d
--- /dev/null
+++ b/blog-pipeline/campaign/post-briefs/M07-S1.md
@@ -0,0 +1,63 @@
+# Three post briefs for M07-S1
+
+Support: [Plan a Batch With Different Supported File Types](../support-briefs/M07-S1.md). Status: PROPOSED BRIEFS, not final copy and not published. Final platform/account and format constraints must be checked before writing.
+
+## M07-S1-P1 — Practical walkthrough
+
+Opening idea: **A batch can contain different review tasks**
+
+Suggested channels: LinkedIn. Actual channel: unassigned.
+
+Content beats:
+
+- Open with the specific review problem: How do I organize a supported mixed-format batch?
+- Give an actionable sequence: Check each format against current UI; Group files by review needs; Track each output separately
+- State the limit: Not a worker architecture article; no unsupported formats or uniform-speed promise.
+
+Visual: Decision/checklist tied to Check each format against current UI. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Small PDF, DOCX and image fixture set with identifiable content in each.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/mixed-file-batch-llmiser`. UTM content: `m07-s1-p1`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M07-S1-P2 — Annotated example
+
+Opening idea: **Build a file-to-output checklist**
+
+Suggested channels: LinkedIn carousel, Instagram carousel. Actual channel: unassigned.
+
+Content beats:
+
+- Introduce the original fixture: Small PDF, DOCX and image fixture set with identifiable content in each.
+- Show the relevant source and actual output side by side; label expected output separately until tested
+- Point out one discrepancy or confirmed match and the next review step
+
+Visual: Annotated source/output fixture comparison. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Small PDF, DOCX and image fixture set with identifiable content in each.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/mixed-file-batch-llmiser`. UTM content: `m07-s1-p2`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M07-S1-P3 — Misconception and limitation
+
+Opening idea: **One successful file does not prove the whole batch**
+
+Suggested channels: X, Threads. Actual channel: unassigned.
+
+Content beats:
+
+- Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result
+- Explain the boundary: Not a worker architecture article; no unsupported formats or uniform-speed promise.
+- Offer a concrete check: Track each output separately
+
+Visual: Two-panel assumption versus verification boundary. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Small PDF, DOCX and image fixture set with identifiable content in each.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/mixed-file-batch-llmiser`. UTM content: `m07-s1-p3`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
diff --git a/blog-pipeline/campaign/post-briefs/M07-S2.md b/blog-pipeline/campaign/post-briefs/M07-S2.md
new file mode 100644
index 0000000..f854050
--- /dev/null
+++ b/blog-pipeline/campaign/post-briefs/M07-S2.md
@@ -0,0 +1,63 @@
+# Three post briefs for M07-S2
+
+Support: [Handle Partial Conversion Failures in a Batch](../support-briefs/M07-S2.md). Status: PROPOSED BRIEFS, not final copy and not published. Final platform/account and format constraints must be checked before writing.
+
+## M07-S2-P1 — Practical walkthrough
+
+Opening idea: **Keep the results that already finished**
+
+Suggested channels: LinkedIn. Actual channel: unassigned.
+
+Content beats:
+
+- Open with the specific review problem: How do I recover when some files finish and others fail?
+- Give an actionable sequence: Identify completed and failed items; Save successful results; Retry only where current UI supports it
+- State the limit: Do not create production load; verify retry controls and avoid automatic full-batch reuploads.
+
+Visual: Decision/checklist tied to Identify completed and failed items. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: One valid document plus an intentionally invalid supported-format fixture in a controlled local/test environment.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/partial-batch-conversion`. UTM content: `m07-s2-p1`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M07-S2-P2 — Annotated example
+
+Opening idea: **Walk through a mixed success-and-failure queue**
+
+Suggested channels: LinkedIn carousel, Instagram carousel. Actual channel: unassigned.
+
+Content beats:
+
+- Introduce the original fixture: One valid document plus an intentionally invalid supported-format fixture in a controlled local/test environment.
+- Show the relevant source and actual output side by side; label expected output separately until tested
+- Point out one discrepancy or confirmed match and the next review step
+
+Visual: Annotated source/output fixture comparison. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: One valid document plus an intentionally invalid supported-format fixture in a controlled local/test environment.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/partial-batch-conversion`. UTM content: `m07-s2-p2`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M07-S2-P3 — Misconception and limitation
+
+Opening idea: **Retry is not the same as starting everything over**
+
+Suggested channels: X, Threads. Actual channel: unassigned.
+
+Content beats:
+
+- Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result
+- Explain the boundary: Do not create production load; verify retry controls and avoid automatic full-batch reuploads.
+- Offer a concrete check: Retry only where current UI supports it
+
+Visual: Two-panel assumption versus verification boundary. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: One valid document plus an intentionally invalid supported-format fixture in a controlled local/test environment.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/partial-batch-conversion`. UTM content: `m07-s2-p3`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
diff --git a/blog-pipeline/campaign/post-briefs/M07-S3.md b/blog-pipeline/campaign/post-briefs/M07-S3.md
new file mode 100644
index 0000000..16ce9e3
--- /dev/null
+++ b/blog-pipeline/campaign/post-briefs/M07-S3.md
@@ -0,0 +1,63 @@
+# Three post briefs for M07-S3
+
+Support: [Split a File Batch Around LLMiser's Upload Limits](../support-briefs/M07-S3.md). Status: PROPOSED BRIEFS, not final copy and not published. Final platform/account and format constraints must be checked before writing.
+
+## M07-S3-P1 — Practical walkthrough
+
+Opening idea: **Batch count and file size are different limits**
+
+Suggested channels: LinkedIn. Actual channel: unassigned.
+
+Content beats:
+
+- Open with the specific review problem: How do I plan a batch that meets documented per-file and queue limits?
+- Give an actionable sequence: Read current limits; Separate queue count from file size; Choose a smaller source or batch
+- State the limit: Do not promise splitting the queue fixes an oversized individual file.
+
+Visual: Decision/checklist tied to Read current limits. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Local file-size/count inventory and UI validation checks; no oversized production upload necessary.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/split-batch-upload-limits`. UTM content: `m07-s3-p1`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M07-S3-P2 — Annotated example
+
+Opening idea: **Sort a sample inventory into valid batches**
+
+Suggested channels: LinkedIn carousel, Instagram carousel. Actual channel: unassigned.
+
+Content beats:
+
+- Introduce the original fixture: Local file-size/count inventory and UI validation checks; no oversized production upload necessary.
+- Show the relevant source and actual output side by side; label expected output separately until tested
+- Point out one discrepancy or confirmed match and the next review step
+
+Visual: Annotated source/output fixture comparison. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Local file-size/count inventory and UI validation checks; no oversized production upload necessary.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/split-batch-upload-limits`. UTM content: `m07-s3-p2`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M07-S3-P3 — Misconception and limitation
+
+Opening idea: **An oversized file stays oversized in a smaller batch**
+
+Suggested channels: X, Threads. Actual channel: unassigned.
+
+Content beats:
+
+- Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result
+- Explain the boundary: Do not promise splitting the queue fixes an oversized individual file.
+- Offer a concrete check: Choose a smaller source or batch
+
+Visual: Two-panel assumption versus verification boundary. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Local file-size/count inventory and UI validation checks; no oversized production upload necessary.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/split-batch-upload-limits`. UTM content: `m07-s3-p3`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
diff --git a/blog-pipeline/campaign/post-briefs/M08-S1.md b/blog-pipeline/campaign/post-briefs/M08-S1.md
new file mode 100644
index 0000000..e1b8964
--- /dev/null
+++ b/blog-pipeline/campaign/post-briefs/M08-S1.md
@@ -0,0 +1,63 @@
+# Three post briefs for M08-S1
+
+Support: [Standard vs Clean: Compare LLMiser Output](../support-briefs/M08-S1.md). Status: PROPOSED BRIEFS, not final copy and not published. Final platform/account and format constraints must be checked before writing.
+
+## M08-S1-P1 — Practical walkthrough
+
+Opening idea: **What did Clean actually change?**
+
+Suggested channels: LinkedIn. Actual channel: unassigned.
+
+Content beats:
+
+- Open with the specific review problem: What changes between Standard and Clean for the same input?
+- Give an actionable sequence: Use one fixture; Compare source line and whitespace; Check content retained
+- State the limit: Do not claim semantic cleanup, deduplication or privacy sanitization.
+
+Visual: Decision/checklist tied to Use one fixture. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Same short Markdown/document input under both profiles, saved as an actual diff.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/llmiser-standard-vs-clean`. UTM content: `m08-s1-p1`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M08-S1-P2 — Annotated example
+
+Opening idea: **Use a two-column output diff**
+
+Suggested channels: LinkedIn carousel, Instagram carousel. Actual channel: unassigned.
+
+Content beats:
+
+- Introduce the original fixture: Same short Markdown/document input under both profiles, saved as an actual diff.
+- Show the relevant source and actual output side by side; label expected output separately until tested
+- Point out one discrepancy or confirmed match and the next review step
+
+Visual: Annotated source/output fixture comparison. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Same short Markdown/document input under both profiles, saved as an actual diff.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/llmiser-standard-vs-clean`. UTM content: `m08-s1-p2`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M08-S1-P3 — Misconception and limitation
+
+Opening idea: **Cleaner formatting is not a content audit**
+
+Suggested channels: X, Threads. Actual channel: unassigned.
+
+Content beats:
+
+- Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result
+- Explain the boundary: Do not claim semantic cleanup, deduplication or privacy sanitization.
+- Offer a concrete check: Check content retained
+
+Visual: Two-panel assumption versus verification boundary. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Same short Markdown/document input under both profiles, saved as an actual diff.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/llmiser-standard-vs-clean`. UTM content: `m08-s1-p3`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
diff --git a/blog-pipeline/campaign/post-briefs/M08-S2.md b/blog-pipeline/campaign/post-briefs/M08-S2.md
new file mode 100644
index 0000000..d74d5e6
--- /dev/null
+++ b/blog-pipeline/campaign/post-briefs/M08-S2.md
@@ -0,0 +1,63 @@
+# Three post briefs for M08-S2
+
+Support: [Check Compact Markdown Before You Use It](../support-briefs/M08-S2.md). Status: PROPOSED BRIEFS, not final copy and not published. Final platform/account and format constraints must be checked before writing.
+
+## M08-S2-P1 — Practical walkthrough
+
+Opening idea: **Less whitespace can change how Markdown reads**
+
+Suggested channels: LinkedIn. Actual channel: unassigned.
+
+Content beats:
+
+- Open with the specific review problem: What needs checking when compact formatting removes separators or spacing?
+- Give an actionable sequence: Inspect the actual transformations; Check structure-sensitive content; Choose readability versus compactness
+- State the limit: No assumed token savings or universally valid table preservation; record unexpected changes.
+
+Visual: Decision/checklist tied to Inspect the actual transformations. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Fixture with blank lines, horizontal rules, table syntax and hyphen sequences; compare all bytes.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/llmiser-compact-markdown-check`. UTM content: `m08-s2-p1`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M08-S2-P2 — Annotated example
+
+Opening idea: **Compare a structure-sensitive fragment**
+
+Suggested channels: LinkedIn carousel, Instagram carousel. Actual channel: unassigned.
+
+Content beats:
+
+- Introduce the original fixture: Fixture with blank lines, horizontal rules, table syntax and hyphen sequences; compare all bytes.
+- Show the relevant source and actual output side by side; label expected output separately until tested
+- Point out one discrepancy or confirmed match and the next review step
+
+Visual: Annotated source/output fixture comparison. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Fixture with blank lines, horizontal rules, table syntax and hyphen sequences; compare all bytes.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/llmiser-compact-markdown-check`. UTM content: `m08-s2-p2`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M08-S2-P3 — Misconception and limitation
+
+Opening idea: **The shortest output is not always the best input**
+
+Suggested channels: X, Threads. Actual channel: unassigned.
+
+Content beats:
+
+- Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result
+- Explain the boundary: No assumed token savings or universally valid table preservation; record unexpected changes.
+- Offer a concrete check: Choose readability versus compactness
+
+Visual: Two-panel assumption versus verification boundary. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Fixture with blank lines, horizontal rules, table syntax and hyphen sequences; compare all bytes.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/llmiser-compact-markdown-check`. UTM content: `m08-s2-p3`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
diff --git a/blog-pipeline/campaign/post-briefs/M08-S3.md b/blog-pipeline/campaign/post-briefs/M08-S3.md
new file mode 100644
index 0000000..9383b2f
--- /dev/null
+++ b/blog-pipeline/campaign/post-briefs/M08-S3.md
@@ -0,0 +1,63 @@
+# Three post briefs for M08-S3
+
+Support: [What LLMiser's RAG-ready Markers Do](../support-briefs/M08-S3.md). Status: PROPOSED BRIEFS, not final copy and not published. Final platform/account and format constraints must be checked before writing.
+
+## M08-S3-P1 — Practical walkthrough
+
+Opening idea: **A chunk marker is a hint, not a retrieval system**
+
+Suggested channels: LinkedIn. Actual channel: unassigned.
+
+Content beats:
+
+- Open with the specific review problem: What does a chunk-boundary marker communicate and what does it not do?
+- Give an actionable sequence: Locate markers in real output; Explain heading alignment; Separate markers from downstream splitting
+- State the limit: No embedding/retrieval service or semantic chunking guarantee; heed existing E08 code audit.
+
+Visual: Decision/checklist tied to Locate markers in real output. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Fixture with H1/H2/H3 and fenced text; inspect marker placement without publishing a fragile splitter.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/llmiser-rag-ready-markers`. UTM content: `m08-s3-p1`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M08-S3-P2 — Annotated example
+
+Opening idea: **Annotate one heading and its marker**
+
+Suggested channels: LinkedIn carousel, Instagram carousel. Actual channel: unassigned.
+
+Content beats:
+
+- Introduce the original fixture: Fixture with H1/H2/H3 and fenced text; inspect marker placement without publishing a fragile splitter.
+- Show the relevant source and actual output side by side; label expected output separately until tested
+- Point out one discrepancy or confirmed match and the next review step
+
+Visual: Annotated source/output fixture comparison. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Fixture with H1/H2/H3 and fenced text; inspect marker placement without publishing a fragile splitter.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/llmiser-rag-ready-markers`. UTM content: `m08-s3-p2`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M08-S3-P3 — Misconception and limitation
+
+Opening idea: **Your downstream splitter still needs testing**
+
+Suggested channels: X, Threads. Actual channel: unassigned.
+
+Content beats:
+
+- Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result
+- Explain the boundary: No embedding/retrieval service or semantic chunking guarantee; heed existing E08 code audit.
+- Offer a concrete check: Separate markers from downstream splitting
+
+Visual: Two-panel assumption versus verification boundary. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Fixture with H1/H2/H3 and fenced text; inspect marker placement without publishing a fragile splitter.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/llmiser-rag-ready-markers`. UTM content: `m08-s3-p3`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
diff --git a/blog-pipeline/campaign/post-briefs/M09-S1.md b/blog-pipeline/campaign/post-briefs/M09-S1.md
new file mode 100644
index 0000000..a1102b2
--- /dev/null
+++ b/blog-pipeline/campaign/post-briefs/M09-S1.md
@@ -0,0 +1,63 @@
+# Three post briefs for M09-S1
+
+Support: [Original or Edited Markdown: Which File Are You Saving?](../support-briefs/M09-S1.md). Status: PROPOSED BRIEFS, not final copy and not published. Final platform/account and format constraints must be checked before writing.
+
+## M09-S1-P1 — Practical walkthrough
+
+Opening idea: **Which version reached your download?**
+
+Suggested channels: LinkedIn. Actual channel: unassigned.
+
+Content beats:
+
+- Open with the specific review problem: How can I tell whether an export includes my edits?
+- Give an actionable sequence: Identify source result and editor state; Make a harmless visible edit; Compare saved outputs
+- State the limit: Verify each action in current UI; do not assume edits persist across refresh or recovery.
+
+Visual: Decision/checklist tied to Identify source result and editor state. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Tiny fixture with a unique marker inserted in editor; compare copy/download/recovery behavior.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/original-edited-markdown`. UTM content: `m09-s1-p1`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M09-S1-P2 — Annotated example
+
+Opening idea: **Trace one visible edit through export**
+
+Suggested channels: LinkedIn carousel, Instagram carousel. Actual channel: unassigned.
+
+Content beats:
+
+- Introduce the original fixture: Tiny fixture with a unique marker inserted in editor; compare copy/download/recovery behavior.
+- Show the relevant source and actual output side by side; label expected output separately until tested
+- Point out one discrepancy or confirmed match and the next review step
+
+Visual: Annotated source/output fixture comparison. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Tiny fixture with a unique marker inserted in editor; compare copy/download/recovery behavior.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/original-edited-markdown`. UTM content: `m09-s1-p2`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M09-S1-P3 — Misconception and limitation
+
+Opening idea: **Recovered output may not be your edited draft**
+
+Suggested channels: X, Threads. Actual channel: unassigned.
+
+Content beats:
+
+- Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result
+- Explain the boundary: Verify each action in current UI; do not assume edits persist across refresh or recovery.
+- Offer a concrete check: Compare saved outputs
+
+Visual: Two-panel assumption versus verification boundary. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Tiny fixture with a unique marker inserted in editor; compare copy/download/recovery behavior.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/original-edited-markdown`. UTM content: `m09-s1-p3`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
diff --git a/blog-pipeline/campaign/post-briefs/M09-S2.md b/blog-pipeline/campaign/post-briefs/M09-S2.md
new file mode 100644
index 0000000..902ea62
--- /dev/null
+++ b/blog-pipeline/campaign/post-briefs/M09-S2.md
@@ -0,0 +1,63 @@
+# Three post briefs for M09-S2
+
+Support: [Check Long Markdown Beyond the Preview](../support-briefs/M09-S2.md). Status: PROPOSED BRIEFS, not final copy and not published. Final platform/account and format constraints must be checked before writing.
+
+## M09-S2-P1 — Practical walkthrough
+
+Opening idea: **A preview is not the whole verification**
+
+Suggested channels: LinkedIn. Actual channel: unassigned.
+
+Content beats:
+
+- Open with the specific review problem: How do I distinguish a limited rendering view from incomplete output?
+- Give an actionable sequence: Identify the preview mode; Locate start middle and end; Compare raw export coverage
+- State the limit: No current size threshold claim without code/UI verification; missing content must be reported.
+
+Visual: Decision/checklist tied to Identify the preview mode. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Synthetic long text with markers at start, middle and end; inspect current preview/export behavior.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/long-markdown-preview`. UTM content: `m09-s2-p1`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M09-S2-P2 — Annotated example
+
+Opening idea: **Check three landmarks in a long export**
+
+Suggested channels: LinkedIn carousel, Instagram carousel. Actual channel: unassigned.
+
+Content beats:
+
+- Introduce the original fixture: Synthetic long text with markers at start, middle and end; inspect current preview/export behavior.
+- Show the relevant source and actual output side by side; label expected output separately until tested
+- Point out one discrepancy or confirmed match and the next review step
+
+Visual: Annotated source/output fixture comparison. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Synthetic long text with markers at start, middle and end; inspect current preview/export behavior.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/long-markdown-preview`. UTM content: `m09-s2-p2`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M09-S2-P3 — Misconception and limitation
+
+Opening idea: **Rendering limits and data loss are different problems**
+
+Suggested channels: X, Threads. Actual channel: unassigned.
+
+Content beats:
+
+- Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result
+- Explain the boundary: No current size threshold claim without code/UI verification; missing content must be reported.
+- Offer a concrete check: Compare raw export coverage
+
+Visual: Two-panel assumption versus verification boundary. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Synthetic long text with markers at start, middle and end; inspect current preview/export behavior.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/long-markdown-preview`. UTM content: `m09-s2-p3`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
diff --git a/blog-pipeline/campaign/post-briefs/M09-S3.md b/blog-pipeline/campaign/post-briefs/M09-S3.md
new file mode 100644
index 0000000..fc68990
--- /dev/null
+++ b/blog-pipeline/campaign/post-briefs/M09-S3.md
@@ -0,0 +1,63 @@
+# Three post briefs for M09-S3
+
+Support: [Copy or Download Markdown: Check the Result](../support-briefs/M09-S3.md). Status: PROPOSED BRIEFS, not final copy and not published. Final platform/account and format constraints must be checked before writing.
+
+## M09-S3-P1 — Practical walkthrough
+
+Opening idea: **Check the destination, not just the copy button**
+
+Suggested channels: LinkedIn. Actual channel: unassigned.
+
+Content beats:
+
+- Open with the specific review problem: What should I check after moving Markdown to another app?
+- Give an actionable sequence: Choose clipboard or file transfer; Check characters and code fences; Compare the destination with saved text
+- State the limit: Destination apps may reformat; no promise of every platform preserving Markdown.
+
+Visual: Decision/checklist tied to Choose clipboard or file transfer. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Small Unicode, pipe-table and fenced-code fixture copied to a plain text editor and downloaded.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/copy-download-markdown`. UTM content: `m09-s3-p1`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M09-S3-P2 — Annotated example
+
+Opening idea: **Compare clipboard text with a downloaded file**
+
+Suggested channels: LinkedIn carousel, Instagram carousel. Actual channel: unassigned.
+
+Content beats:
+
+- Introduce the original fixture: Small Unicode, pipe-table and fenced-code fixture copied to a plain text editor and downloaded.
+- Show the relevant source and actual output side by side; label expected output separately until tested
+- Point out one discrepancy or confirmed match and the next review step
+
+Visual: Annotated source/output fixture comparison. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Small Unicode, pipe-table and fenced-code fixture copied to a plain text editor and downloaded.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/copy-download-markdown`. UTM content: `m09-s3-p2`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M09-S3-P3 — Misconception and limitation
+
+Opening idea: **Formatting changes can happen after export**
+
+Suggested channels: X, Threads. Actual channel: unassigned.
+
+Content beats:
+
+- Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result
+- Explain the boundary: Destination apps may reformat; no promise of every platform preserving Markdown.
+- Offer a concrete check: Compare the destination with saved text
+
+Visual: Two-panel assumption versus verification boundary. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Small Unicode, pipe-table and fenced-code fixture copied to a plain text editor and downloaded.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/copy-download-markdown`. UTM content: `m09-s3-p3`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
diff --git a/blog-pipeline/campaign/post-briefs/M10-S1.md b/blog-pipeline/campaign/post-briefs/M10-S1.md
new file mode 100644
index 0000000..8445bce
--- /dev/null
+++ b/blog-pipeline/campaign/post-briefs/M10-S1.md
@@ -0,0 +1,63 @@
+# Three post briefs for M10-S1
+
+Support: [Find Relevant Files in PROJECT_INDEX.md](../support-briefs/M10-S1.md). Status: PROPOSED BRIEFS, not final copy and not published. Final platform/account and format constraints must be checked before writing.
+
+## M10-S1-P1 — Practical walkthrough
+
+Opening idea: **Two config files can have different jobs**
+
+Suggested channels: LinkedIn. Actual channel: unassigned.
+
+Content beats:
+
+- Open with the specific review problem: How do source paths help locate the right converted file?
+- Give an actionable sequence: Read the actual index layout; Distinguish repeated basenames; Find the corresponding content
+- State the limit: Use actual current index format; no invented links or schema fields.
+
+Visual: Decision/checklist tied to Read the actual index layout. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: ZIP with src/config.txt and docs/config.txt containing different text; inspect index and combined output.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/read-project-index-paths`. UTM content: `m10-s1-p1`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M10-S1-P2 — Annotated example
+
+Opening idea: **Follow a full path from index to content**
+
+Suggested channels: LinkedIn carousel, Instagram carousel. Actual channel: unassigned.
+
+Content beats:
+
+- Introduce the original fixture: ZIP with src/config.txt and docs/config.txt containing different text; inspect index and combined output.
+- Show the relevant source and actual output side by side; label expected output separately until tested
+- Point out one discrepancy or confirmed match and the next review step
+
+Visual: Annotated source/output fixture comparison. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: ZIP with src/config.txt and docs/config.txt containing different text; inspect index and combined output.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/read-project-index-paths`. UTM content: `m10-s1-p2`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M10-S1-P3 — Misconception and limitation
+
+Opening idea: **A basename alone may be ambiguous**
+
+Suggested channels: X, Threads. Actual channel: unassigned.
+
+Content beats:
+
+- Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result
+- Explain the boundary: Use actual current index format; no invented links or schema fields.
+- Offer a concrete check: Find the corresponding content
+
+Visual: Two-panel assumption versus verification boundary. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: ZIP with src/config.txt and docs/config.txt containing different text; inspect index and combined output.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/read-project-index-paths`. UTM content: `m10-s1-p3`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
diff --git a/blog-pipeline/campaign/post-briefs/M10-S2.md b/blog-pipeline/campaign/post-briefs/M10-S2.md
new file mode 100644
index 0000000..b9bbbd0
--- /dev/null
+++ b/blog-pipeline/campaign/post-briefs/M10-S2.md
@@ -0,0 +1,63 @@
+# Three post briefs for M10-S2
+
+Support: [Reconcile a ZIP Manifest With Your Source Files](../support-briefs/M10-S2.md). Status: PROPOSED BRIEFS, not final copy and not published. Final platform/account and format constraints must be checked before writing.
+
+## M10-S2-P1 — Practical walkthrough
+
+Opening idea: **Success does not mean every file was included**
+
+Suggested channels: LinkedIn. Actual channel: unassigned.
+
+Content beats:
+
+- Open with the specific review problem: How do I account for every intended source item after conversion?
+- Give an actionable sequence: Create an expected inventory; Read actual outcome fields; Reconcile counts and unresolved items
+- State the limit: Never infer that every source was converted from a successful overall status.
+
+Visual: Decision/checklist tied to Create an expected inventory. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Tiny ZIP inventory with valid supported entries and a deliberately unsupported harmless item; save actual manifest.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/reconcile-zip-manifest`. UTM content: `m10-s2-p1`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M10-S2-P2 — Annotated example
+
+Opening idea: **Compare expected entries with reported outcomes**
+
+Suggested channels: LinkedIn carousel, Instagram carousel. Actual channel: unassigned.
+
+Content beats:
+
+- Introduce the original fixture: Tiny ZIP inventory with valid supported entries and a deliberately unsupported harmless item; save actual manifest.
+- Show the relevant source and actual output side by side; label expected output separately until tested
+- Point out one discrepancy or confirmed match and the next review step
+
+Visual: Annotated source/output fixture comparison. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Tiny ZIP inventory with valid supported entries and a deliberately unsupported harmless item; save actual manifest.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/reconcile-zip-manifest`. UTM content: `m10-s2-p2`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M10-S2-P3 — Misconception and limitation
+
+Opening idea: **Count converted, skipped and unresolved separately**
+
+Suggested channels: X, Threads. Actual channel: unassigned.
+
+Content beats:
+
+- Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result
+- Explain the boundary: Never infer that every source was converted from a successful overall status.
+- Offer a concrete check: Reconcile counts and unresolved items
+
+Visual: Two-panel assumption versus verification boundary. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Tiny ZIP inventory with valid supported entries and a deliberately unsupported harmless item; save actual manifest.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/reconcile-zip-manifest`. UTM content: `m10-s2-p3`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
diff --git a/blog-pipeline/campaign/post-briefs/M10-S3.md b/blog-pipeline/campaign/post-briefs/M10-S3.md
new file mode 100644
index 0000000..d57d63b
--- /dev/null
+++ b/blog-pipeline/campaign/post-briefs/M10-S3.md
@@ -0,0 +1,63 @@
+# Three post briefs for M10-S3
+
+Support: [Investigate Missing Content in a ZIP Conversion](../support-briefs/M10-S3.md). Status: PROPOSED BRIEFS, not final copy and not published. Final platform/account and format constraints must be checked before writing.
+
+## M10-S3-P1 — Practical walkthrough
+
+Opening idea: **Where did that archive entry go?**
+
+Suggested channels: LinkedIn. Actual channel: unassigned.
+
+Content beats:
+
+- Open with the specific review problem: How do I distinguish an intentional exclusion from a conversion omission?
+- Give an actionable sequence: Locate the expected entry; Inspect reported restrictions or outcomes; Retry a permitted small source separately
+- State the limit: Do not claim all nested ZIPs are expanded or recommend bypassing limits; separate from pre-upload exclusions in M01.
+
+Visual: Decision/checklist tied to Locate the expected entry. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Controlled nested-archive or unsupported-entry fixture with documented limits; inspect actual result.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/missing-zip-conversion-content`. UTM content: `m10-s3-p1`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M10-S3-P2 — Annotated example
+
+Opening idea: **Trace a missing item through the result artifacts**
+
+Suggested channels: LinkedIn carousel, Instagram carousel. Actual channel: unassigned.
+
+Content beats:
+
+- Introduce the original fixture: Controlled nested-archive or unsupported-entry fixture with documented limits; inspect actual result.
+- Show the relevant source and actual output side by side; label expected output separately until tested
+- Point out one discrepancy or confirmed match and the next review step
+
+Visual: Annotated source/output fixture comparison. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Controlled nested-archive or unsupported-entry fixture with documented limits; inspect actual result.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/missing-zip-conversion-content`. UTM content: `m10-s3-p2`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M10-S3-P3 — Misconception and limitation
+
+Opening idea: **Omitted content needs an explanation**
+
+Suggested channels: X, Threads. Actual channel: unassigned.
+
+Content beats:
+
+- Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result
+- Explain the boundary: Do not claim all nested ZIPs are expanded or recommend bypassing limits; separate from pre-upload exclusions in M01.
+- Offer a concrete check: Retry a permitted small source separately
+
+Visual: Two-panel assumption versus verification boundary. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Controlled nested-archive or unsupported-entry fixture with documented limits; inspect actual result.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/missing-zip-conversion-content`. UTM content: `m10-s3-p3`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
diff --git a/blog-pipeline/campaign/post-briefs/M11-S1.md b/blog-pipeline/campaign/post-briefs/M11-S1.md
new file mode 100644
index 0000000..2583031
--- /dev/null
+++ b/blog-pipeline/campaign/post-briefs/M11-S1.md
@@ -0,0 +1,63 @@
+# Three post briefs for M11-S1
+
+Support: [Recognize Instructions Inside an Untrusted Document](../support-briefs/M11-S1.md). Status: PROPOSED BRIEFS, not final copy and not published. Final platform/account and format constraints must be checked before writing.
+
+## M11-S1-P1 — Practical walkthrough
+
+Opening idea: **Who actually asked the AI to do that?**
+
+Suggested channels: LinkedIn. Actual channel: unassigned.
+
+Content beats:
+
+- Open with the specific review problem: How do I recognize source text attempting to redirect the task?
+- Give an actionable sequence: Separate user task from source claims; Identify role-like imperatives; Treat suspicious passages as quoted evidence
+- State the limit: Recognition is not proof of detection completeness; cite OWASP and do not execute embedded commands.
+
+Visual: Decision/checklist tied to Separate user task from source claims. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Inert local excerpt asking for an unrelated summary style, clearly labeled illustrative; no secret extraction or live attack.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/untrusted-document-instructions`. UTM content: `m11-s1-p1`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M11-S1-P2 — Annotated example
+
+Opening idea: **Label task instruction versus document quotation**
+
+Suggested channels: LinkedIn carousel, Instagram carousel. Actual channel: unassigned.
+
+Content beats:
+
+- Introduce the original fixture: Inert local excerpt asking for an unrelated summary style, clearly labeled illustrative; no secret extraction or live attack.
+- Show the relevant source and actual output side by side; label expected output separately until tested
+- Point out one discrepancy or confirmed match and the next review step
+
+Visual: Annotated source/output fixture comparison. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Inert local excerpt asking for an unrelated summary style, clearly labeled illustrative; no secret extraction or live attack.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/untrusted-document-instructions`. UTM content: `m11-s1-p2`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M11-S1-P3 — Misconception and limitation
+
+Opening idea: **Official-looking wording does not grant authority**
+
+Suggested channels: X, Threads. Actual channel: unassigned.
+
+Content beats:
+
+- Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result
+- Explain the boundary: Recognition is not proof of detection completeness; cite OWASP and do not execute embedded commands.
+- Offer a concrete check: Treat suspicious passages as quoted evidence
+
+Visual: Two-panel assumption versus verification boundary. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Inert local excerpt asking for an unrelated summary style, clearly labeled illustrative; no secret extraction or live attack.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/untrusted-document-instructions`. UTM content: `m11-s1-p3`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
diff --git a/blog-pipeline/campaign/post-briefs/M11-S2.md b/blog-pipeline/campaign/post-briefs/M11-S2.md
new file mode 100644
index 0000000..52a7481
--- /dev/null
+++ b/blog-pipeline/campaign/post-briefs/M11-S2.md
@@ -0,0 +1,63 @@
+# Three post briefs for M11-S2
+
+Support: [Why Markdown Conversion Does Not Remove Prompt Injection](../support-briefs/M11-S2.md). Status: PROPOSED BRIEFS, not final copy and not published. Final platform/account and format constraints must be checked before writing.
+
+## M11-S2-P1 — Practical walkthrough
+
+Opening idea: **A new format does not make text trusted**
+
+Suggested channels: LinkedIn. Actual channel: unassigned.
+
+Content beats:
+
+- Open with the specific review problem: Why can an instruction attempt survive a change of file format?
+- Give an actionable sequence: Trace source text into Markdown; Separate formatting from trust; Describe downstream review and permissions
+- State the limit: No claim conversion is a sanitizer or that keyword removal is a complete defense.
+
+Visual: Decision/checklist tied to Trace source text into Markdown. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Harmless imperative preserved through an original text/document conversion; inspect strings only.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/markdown-conversion-prompt-injection`. UTM content: `m11-s2-p1`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M11-S2-P2 — Annotated example
+
+Opening idea: **Follow one harmless instruction-shaped sentence**
+
+Suggested channels: LinkedIn carousel, Instagram carousel. Actual channel: unassigned.
+
+Content beats:
+
+- Introduce the original fixture: Harmless imperative preserved through an original text/document conversion; inspect strings only.
+- Show the relevant source and actual output side by side; label expected output separately until tested
+- Point out one discrepancy or confirmed match and the next review step
+
+Visual: Annotated source/output fixture comparison. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Harmless imperative preserved through an original text/document conversion; inspect strings only.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/markdown-conversion-prompt-injection`. UTM content: `m11-s2-p2`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M11-S2-P3 — Misconception and limitation
+
+Opening idea: **Removing formatting is not removing intent**
+
+Suggested channels: X, Threads. Actual channel: unassigned.
+
+Content beats:
+
+- Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result
+- Explain the boundary: No claim conversion is a sanitizer or that keyword removal is a complete defense.
+- Offer a concrete check: Describe downstream review and permissions
+
+Visual: Two-panel assumption versus verification boundary. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Harmless imperative preserved through an original text/document conversion; inspect strings only.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/markdown-conversion-prompt-injection`. UTM content: `m11-s2-p3`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
diff --git a/blog-pipeline/campaign/post-briefs/M11-S3.md b/blog-pipeline/campaign/post-briefs/M11-S3.md
new file mode 100644
index 0000000..23f54a8
--- /dev/null
+++ b/blog-pipeline/campaign/post-briefs/M11-S3.md
@@ -0,0 +1,63 @@
+# Three post briefs for M11-S3
+
+Support: [Review AI Actions After Reading External Documents](../support-briefs/M11-S3.md). Status: PROPOSED BRIEFS, not final copy and not published. Final platform/account and format constraints must be checked before writing.
+
+## M11-S3-P1 — Practical walkthrough
+
+Opening idea: **Reading a document should not grant it permissions**
+
+Suggested channels: LinkedIn. Actual channel: unassigned.
+
+Content beats:
+
+- Open with the specific review problem: What should a reader check before allowing actions derived from a document?
+- Give an actionable sequence: Identify the requested action; Trace it to user authorization; Review tool permissions and proposed effects
+- State the limit: Stay defensive; LLMiser does not enforce downstream tool permissions.
+
+Visual: Decision/checklist tied to Identify the requested action. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Paper exercise comparing summarize-only task with a source requesting an external action; no messages sent.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/ai-actions-external-documents`. UTM content: `m11-s3-p1`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M11-S3-P2 — Annotated example
+
+Opening idea: **Draw the boundary between reading and acting**
+
+Suggested channels: LinkedIn carousel, Instagram carousel. Actual channel: unassigned.
+
+Content beats:
+
+- Introduce the original fixture: Paper exercise comparing summarize-only task with a source requesting an external action; no messages sent.
+- Show the relevant source and actual output side by side; label expected output separately until tested
+- Point out one discrepancy or confirmed match and the next review step
+
+Visual: Annotated source/output fixture comparison. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Paper exercise comparing summarize-only task with a source requesting an external action; no messages sent.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/ai-actions-external-documents`. UTM content: `m11-s3-p2`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M11-S3-P3 — Misconception and limitation
+
+Opening idea: **A citation is not approval to perform an action**
+
+Suggested channels: X, Threads. Actual channel: unassigned.
+
+Content beats:
+
+- Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result
+- Explain the boundary: Stay defensive; LLMiser does not enforce downstream tool permissions.
+- Offer a concrete check: Review tool permissions and proposed effects
+
+Visual: Two-panel assumption versus verification boundary. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Paper exercise comparing summarize-only task with a source requesting an external action; no messages sent.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/ai-actions-external-documents`. UTM content: `m11-s3-p3`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
diff --git a/blog-pipeline/campaign/post-briefs/M12-S1.md b/blog-pipeline/campaign/post-briefs/M12-S1.md
new file mode 100644
index 0000000..ffe6f7e
--- /dev/null
+++ b/blog-pipeline/campaign/post-briefs/M12-S1.md
@@ -0,0 +1,63 @@
+# Three post briefs for M12-S1
+
+Support: [Label Document Versions Before Building AI Context](../support-briefs/M12-S1.md). Status: PROPOSED BRIEFS, not final copy and not published. Final platform/account and format constraints must be checked before writing.
+
+## M12-S1-P1 — Practical walkthrough
+
+Opening idea: **Downloaded today does not mean effective today**
+
+Suggested channels: LinkedIn. Actual channel: unassigned.
+
+Content beats:
+
+- Open with the specific review problem: Which provenance fields distinguish two versions of a source?
+- Give an actionable sequence: Record source identity and revision; Separate effective date from download date; Include a compact provenance note
+- State the limit: No fabricated author/date; keep unknown fields explicit and no built-in version-management claim.
+
+Visual: Decision/checklist tied to Record source identity and revision. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Two synthetic policy revisions with filename, version and effective date, plus a stable source ID.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/label-document-versions-ai`. UTM content: `m12-s1-p1`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M12-S1-P2 — Annotated example
+
+Opening idea: **Compare revision date with effective date**
+
+Suggested channels: LinkedIn carousel, Instagram carousel. Actual channel: unassigned.
+
+Content beats:
+
+- Introduce the original fixture: Two synthetic policy revisions with filename, version and effective date, plus a stable source ID.
+- Show the relevant source and actual output side by side; label expected output separately until tested
+- Point out one discrepancy or confirmed match and the next review step
+
+Visual: Annotated source/output fixture comparison. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Two synthetic policy revisions with filename, version and effective date, plus a stable source ID.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/label-document-versions-ai`. UTM content: `m12-s1-p2`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M12-S1-P3 — Misconception and limitation
+
+Opening idea: **A filename is only one piece of provenance**
+
+Suggested channels: X, Threads. Actual channel: unassigned.
+
+Content beats:
+
+- Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result
+- Explain the boundary: No fabricated author/date; keep unknown fields explicit and no built-in version-management claim.
+- Offer a concrete check: Include a compact provenance note
+
+Visual: Two-panel assumption versus verification boundary. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Two synthetic policy revisions with filename, version and effective date, plus a stable source ID.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/label-document-versions-ai`. UTM content: `m12-s1-p3`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
diff --git a/blog-pipeline/campaign/post-briefs/M12-S2.md b/blog-pipeline/campaign/post-briefs/M12-S2.md
new file mode 100644
index 0000000..6607a71
--- /dev/null
+++ b/blog-pipeline/campaign/post-briefs/M12-S2.md
@@ -0,0 +1,63 @@
+# Three post briefs for M12-S2
+
+Support: [Resolve Conflicting Policy Passages Before Asking AI](../support-briefs/M12-S2.md). Status: PROPOSED BRIEFS, not final copy and not published. Final platform/account and format constraints must be checked before writing.
+
+## M12-S2-P1 — Practical walkthrough
+
+Opening idea: **Both passages can be valid in different contexts**
+
+Suggested channels: LinkedIn. Actual channel: unassigned.
+
+Content beats:
+
+- Open with the specific review problem: How do I handle two valid-looking passages with different scopes?
+- Give an actionable sequence: Compare audience date and applicability; Identify authorized precedence or uncertainty; Ask for clarification when needed
+- State the limit: Do not assume newer always wins or silently choose a policy; generic information, not legal advice.
+
+Visual: Decision/checklist tied to Compare audience date and applicability. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Two fictional company policies for different teams with different limits; no real legal interpretation.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/conflicting-policy-passages-ai`. UTM content: `m12-s2-p1`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M12-S2-P2 — Annotated example
+
+Opening idea: **Build a scope-and-date comparison card**
+
+Suggested channels: LinkedIn carousel, Instagram carousel. Actual channel: unassigned.
+
+Content beats:
+
+- Introduce the original fixture: Two fictional company policies for different teams with different limits; no real legal interpretation.
+- Show the relevant source and actual output side by side; label expected output separately until tested
+- Point out one discrepancy or confirmed match and the next review step
+
+Visual: Annotated source/output fixture comparison. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Two fictional company policies for different teams with different limits; no real legal interpretation.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/conflicting-policy-passages-ai`. UTM content: `m12-s2-p2`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M12-S2-P3 — Misconception and limitation
+
+Opening idea: **The latest document is not always the applicable one**
+
+Suggested channels: X, Threads. Actual channel: unassigned.
+
+Content beats:
+
+- Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result
+- Explain the boundary: Do not assume newer always wins or silently choose a policy; generic information, not legal advice.
+- Offer a concrete check: Ask for clarification when needed
+
+Visual: Two-panel assumption versus verification boundary. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Two fictional company policies for different teams with different limits; no real legal interpretation.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/conflicting-policy-passages-ai`. UTM content: `m12-s2-p3`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
diff --git a/blog-pipeline/campaign/post-briefs/M12-S3.md b/blog-pipeline/campaign/post-briefs/M12-S3.md
new file mode 100644
index 0000000..072858f
--- /dev/null
+++ b/blog-pipeline/campaign/post-briefs/M12-S3.md
@@ -0,0 +1,63 @@
+# Three post briefs for M12-S3
+
+Support: [Remove Stale Excerpts From an AI Context Packet](../support-briefs/M12-S3.md). Status: PROPOSED BRIEFS, not final copy and not published. Final platform/account and format constraints must be checked before writing.
+
+## M12-S3-P1 — Practical walkthrough
+
+Opening idea: **Updating the source may leave old excerpts behind**
+
+Suggested channels: LinkedIn. Actual channel: unassigned.
+
+Content beats:
+
+- Open with the specific review problem: How do I update a manually assembled packet when a source changes?
+- Give an actionable sequence: Identify excerpts tied to the superseded source; Replace and preserve provenance; Test a question affected by the change
+- State the limit: No automatic cache/index invalidation feature claimed; distinguish a manual packet from a production RAG index.
+
+Visual: Decision/checklist tied to Identify excerpts tied to the superseded source. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Local packet containing old and new fictional deadlines; trace each excerpt to source revision.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/stale-excerpts-ai-context`. UTM content: `m12-s3-p1`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M12-S3-P2 — Annotated example
+
+Opening idea: **Trace one revised fact through the packet**
+
+Suggested channels: LinkedIn carousel, Instagram carousel. Actual channel: unassigned.
+
+Content beats:
+
+- Introduce the original fixture: Local packet containing old and new fictional deadlines; trace each excerpt to source revision.
+- Show the relevant source and actual output side by side; label expected output separately until tested
+- Point out one discrepancy or confirmed match and the next review step
+
+Visual: Annotated source/output fixture comparison. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Local packet containing old and new fictional deadlines; trace each excerpt to source revision.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/stale-excerpts-ai-context`. UTM content: `m12-s3-p2`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
+
+## M12-S3-P3 — Misconception and limitation
+
+Opening idea: **Do not keep both versions without explaining why**
+
+Suggested channels: X, Threads. Actual channel: unassigned.
+
+Content beats:
+
+- Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result
+- Explain the boundary: No automatic cache/index invalidation feature claimed; distinguish a manual packet from a production RAG index.
+- Offer a concrete check: Test a question affected by the change
+
+Visual: Two-panel assumption versus verification boundary. Include readable text and alt text; do not fabricate a success screenshot.
+
+Evidence required: Local packet containing old and new fictional deadlines; trace each excerpt to source revision.
+
+CTA: link to the support article for the full check after it is live. Reserved canonical: `https://llmiser.devbehindyou.com/blog/stale-excerpts-ai-context`. UTM content: `m12-s3-p3`. Set source/medium from the actual chosen platform.
+
+Review: verify every claim against the final support article, preserve the limitation, adapt length/format to the chosen channel and disclose product association where appropriate. Do not claim a hypothetical test was run.
diff --git a/blog-pipeline/campaign/posts.json b/blog-pipeline/campaign/posts.json
new file mode 100644
index 0000000..4678b17
--- /dev/null
+++ b/blog-pipeline/campaign/posts.json
@@ -0,0 +1,2958 @@
+{
+ "updated": "2026-11-05",
+ "scope": "108 individual post briefs; no final copy, publication or selected accounts",
+ "posts": [
+ {
+ "id": "M01-S1-P1",
+ "support_id": "M01-S1",
+ "main_id": "M01",
+ "status": "PROPOSED",
+ "format": "Practical walkthrough",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn"
+ ],
+ "hook": "A renamed .env file is still sensitive",
+ "beats": [
+ "Open with the specific review problem: How do I review a sharing copy for credentials and private data?",
+ "Give an actionable sequence: Locate configuration and logs; Inspect an extracted sharing copy; Remove sensitive material and recheck",
+ "State the limit: Do not use real secrets or imply the converter detects credentials."
+ ],
+ "visual": "Decision/checklist tied to Locate configuration and logs",
+ "source_refs": [
+ "SRC-GIT",
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Toy repo with clearly fake keys, a synthetic log and harmless config. Compare the original and sharing inventory.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/project-zip-secret-review",
+ "utm_content": "m01-s1-p1",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M01-S1.md"
+ },
+ {
+ "id": "M01-S1-P2",
+ "support_id": "M01-S1",
+ "main_id": "M01",
+ "status": "PROPOSED",
+ "format": "Annotated example",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn carousel",
+ "Instagram carousel"
+ ],
+ "hook": "Show a sharing-copy review checklist",
+ "beats": [
+ "Introduce the original fixture: Toy repo with clearly fake keys, a synthetic log and harmless config. Compare the original and sharing inventory.",
+ "Show the relevant source and actual output side by side; label expected output separately until tested",
+ "Point out one discrepancy or confirmed match and the next review step"
+ ],
+ "visual": "Annotated source/output fixture comparison",
+ "source_refs": [
+ "SRC-GIT",
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Toy repo with clearly fake keys, a synthetic log and harmless config. Compare the original and sharing inventory.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/project-zip-secret-review",
+ "utm_content": "m01-s1-p2",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M01-S1.md"
+ },
+ {
+ "id": "M01-S1-P3",
+ "support_id": "M01-S1",
+ "main_id": "M01",
+ "status": "PROPOSED",
+ "format": "Misconception and limitation",
+ "channel": null,
+ "suggested_channels": [
+ "X",
+ "Threads"
+ ],
+ "hook": "Removing a filename is not a secret scan",
+ "beats": [
+ "Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result",
+ "Explain the boundary: Do not use real secrets or imply the converter detects credentials.",
+ "Offer a concrete check: Remove sensitive material and recheck"
+ ],
+ "visual": "Two-panel assumption versus verification boundary",
+ "source_refs": [
+ "SRC-GIT",
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Toy repo with clearly fake keys, a synthetic log and harmless config. Compare the original and sharing inventory.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/project-zip-secret-review",
+ "utm_content": "m01-s1-p3",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M01-S1.md"
+ },
+ {
+ "id": "M01-S2-P1",
+ "support_id": "M01-S2",
+ "main_id": "M01",
+ "status": "PROPOSED",
+ "format": "Practical walkthrough",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn"
+ ],
+ "hook": "Keep the dependency map, review the bulk",
+ "beats": [
+ "Open with the specific review problem: What should remain when installed packages are removed?",
+ "Give an actionable sequence: Separate manifests from installed packages; Match files to the review question; Keep version context",
+ "State the limit: Do not prescribe removing all lockfiles or all vendored source."
+ ],
+ "visual": "Decision/checklist tied to Separate manifests from installed packages",
+ "source_refs": [
+ "SRC-GIT",
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Toy project with package manifest, lockfile, vendor folder and import requiring version context.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/dependency-files-ai-review",
+ "utm_content": "m01-s2-p1",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M01-S2.md"
+ },
+ {
+ "id": "M01-S2-P2",
+ "support_id": "M01-S2",
+ "main_id": "M01",
+ "status": "PROPOSED",
+ "format": "Annotated example",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn carousel",
+ "Instagram carousel"
+ ],
+ "hook": "Compare a manifest with an installed package tree",
+ "beats": [
+ "Introduce the original fixture: Toy project with package manifest, lockfile, vendor folder and import requiring version context.",
+ "Show the relevant source and actual output side by side; label expected output separately until tested",
+ "Point out one discrepancy or confirmed match and the next review step"
+ ],
+ "visual": "Annotated source/output fixture comparison",
+ "source_refs": [
+ "SRC-GIT",
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Toy project with package manifest, lockfile, vendor folder and import requiring version context.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/dependency-files-ai-review",
+ "utm_content": "m01-s2-p2",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M01-S2.md"
+ },
+ {
+ "id": "M01-S2-P3",
+ "support_id": "M01-S2",
+ "main_id": "M01",
+ "status": "PROPOSED",
+ "format": "Misconception and limitation",
+ "channel": null,
+ "suggested_channels": [
+ "X",
+ "Threads"
+ ],
+ "hook": "When vendored code is the code under review",
+ "beats": [
+ "Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result",
+ "Explain the boundary: Do not prescribe removing all lockfiles or all vendored source.",
+ "Offer a concrete check: Keep version context"
+ ],
+ "visual": "Two-panel assumption versus verification boundary",
+ "source_refs": [
+ "SRC-GIT",
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Toy project with package manifest, lockfile, vendor folder and import requiring version context.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/dependency-files-ai-review",
+ "utm_content": "m01-s2-p3",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M01-S2.md"
+ },
+ {
+ "id": "M01-S3-P1",
+ "support_id": "M01-S3",
+ "main_id": "M01",
+ "status": "PROPOSED",
+ "format": "Practical walkthrough",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn"
+ ],
+ "hook": "One bug can span more than one file",
+ "beats": [
+ "Open with the specific review problem: How do I select enough source and tests for one code question?",
+ "Give an actionable sequence: Define the question; Trace relevant imports and tests; Review omissions",
+ "State the limit: No universal file-count or answer-quality improvement promise."
+ ],
+ "visual": "Decision/checklist tied to Define the question",
+ "source_refs": [
+ "SRC-GIT",
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Toy bug spanning a caller, helper and test; compare a minimal sufficient bundle with an incomplete one.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/task-focused-code-bundle",
+ "utm_content": "m01-s3-p1",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M01-S3.md"
+ },
+ {
+ "id": "M01-S3-P2",
+ "support_id": "M01-S3",
+ "main_id": "M01",
+ "status": "PROPOSED",
+ "format": "Annotated example",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn carousel",
+ "Instagram carousel"
+ ],
+ "hook": "Show the caller-helper-test evidence chain",
+ "beats": [
+ "Introduce the original fixture: Toy bug spanning a caller, helper and test; compare a minimal sufficient bundle with an incomplete one.",
+ "Show the relevant source and actual output side by side; label expected output separately until tested",
+ "Point out one discrepancy or confirmed match and the next review step"
+ ],
+ "visual": "Annotated source/output fixture comparison",
+ "source_refs": [
+ "SRC-GIT",
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Toy bug spanning a caller, helper and test; compare a minimal sufficient bundle with an incomplete one.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/task-focused-code-bundle",
+ "utm_content": "m01-s3-p2",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M01-S3.md"
+ },
+ {
+ "id": "M01-S3-P3",
+ "support_id": "M01-S3",
+ "main_id": "M01",
+ "status": "PROPOSED",
+ "format": "Misconception and limitation",
+ "channel": null,
+ "suggested_channels": [
+ "X",
+ "Threads"
+ ],
+ "hook": "Smallest is not always sufficient",
+ "beats": [
+ "Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result",
+ "Explain the boundary: No universal file-count or answer-quality improvement promise.",
+ "Offer a concrete check: Review omissions"
+ ],
+ "visual": "Two-panel assumption versus verification boundary",
+ "source_refs": [
+ "SRC-GIT",
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Toy bug spanning a caller, helper and test; compare a minimal sufficient bundle with an incomplete one.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/task-focused-code-bundle",
+ "utm_content": "m01-s3-p3",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M01-S3.md"
+ },
+ {
+ "id": "M02-S1-P1",
+ "support_id": "M02-S1",
+ "main_id": "M02",
+ "status": "PROPOSED",
+ "format": "Practical walkthrough",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn"
+ ],
+ "hook": "A readable scan can still face the wrong way",
+ "beats": [
+ "Open with the specific review problem: How does orientation affect recognition in a specific sample?",
+ "Give an actionable sequence: Inspect orientation; Compare original and corrected copy; Check output against both",
+ "State the limit: Do not claim LLMiser always corrects rotation automatically."
+ ],
+ "visual": "Decision/checklist tied to Inspect orientation",
+ "source_refs": [
+ "SRC-LOCAL",
+ "SRC-OCR-RESEARCH"
+ ],
+ "evidence_required": "Synthetic English image at 0 and 90 degrees, plus a carefully rotated copy; save actual outputs.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/rotated-scan-ocr-check",
+ "utm_content": "m02-s1-p1",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M02-S1.md"
+ },
+ {
+ "id": "M02-S1-P2",
+ "support_id": "M02-S1",
+ "main_id": "M02",
+ "status": "PROPOSED",
+ "format": "Annotated example",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn carousel",
+ "Instagram carousel"
+ ],
+ "hook": "Compare orientation using one controlled sample",
+ "beats": [
+ "Introduce the original fixture: Synthetic English image at 0 and 90 degrees, plus a carefully rotated copy; save actual outputs.",
+ "Show the relevant source and actual output side by side; label expected output separately until tested",
+ "Point out one discrepancy or confirmed match and the next review step"
+ ],
+ "visual": "Annotated source/output fixture comparison",
+ "source_refs": [
+ "SRC-LOCAL",
+ "SRC-OCR-RESEARCH"
+ ],
+ "evidence_required": "Synthetic English image at 0 and 90 degrees, plus a carefully rotated copy; save actual outputs.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/rotated-scan-ocr-check",
+ "utm_content": "m02-s1-p2",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M02-S1.md"
+ },
+ {
+ "id": "M02-S1-P3",
+ "support_id": "M02-S1",
+ "main_id": "M02",
+ "status": "PROPOSED",
+ "format": "Misconception and limitation",
+ "channel": null,
+ "suggested_channels": [
+ "X",
+ "Threads"
+ ],
+ "hook": "Rotation and blur need different checks",
+ "beats": [
+ "Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result",
+ "Explain the boundary: Do not claim LLMiser always corrects rotation automatically.",
+ "Offer a concrete check: Check output against both"
+ ],
+ "visual": "Two-panel assumption versus verification boundary",
+ "source_refs": [
+ "SRC-LOCAL",
+ "SRC-OCR-RESEARCH"
+ ],
+ "evidence_required": "Synthetic English image at 0 and 90 degrees, plus a carefully rotated copy; save actual outputs.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/rotated-scan-ocr-check",
+ "utm_content": "m02-s1-p3",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M02-S1.md"
+ },
+ {
+ "id": "M02-S2-P1",
+ "support_id": "M02-S2",
+ "main_id": "M02",
+ "status": "PROPOSED",
+ "format": "Practical walkthrough",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn"
+ ],
+ "hook": "A single zero can change the meaning",
+ "beats": [
+ "Open with the specific review problem: How do I verify digits and labels without trusting fluent OCR text?",
+ "Give an actionable sequence: Locate high-impact fields; Compare exact characters and separators; Record corrections",
+ "State the limit: No financial recommendation; report character fidelity, not invented accuracy rates."
+ ],
+ "visual": "Decision/checklist tied to Locate high-impact fields",
+ "source_refs": [
+ "SRC-LOCAL",
+ "SRC-OCR-RESEARCH"
+ ],
+ "evidence_required": "Synthetic invoice with 00123, 10.50, a date and letter O/zero examples.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/verify-ocr-numbers",
+ "utm_content": "m02-s2-p1",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M02-S2.md"
+ },
+ {
+ "id": "M02-S2-P2",
+ "support_id": "M02-S2",
+ "main_id": "M02",
+ "status": "PROPOSED",
+ "format": "Annotated example",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn carousel",
+ "Instagram carousel"
+ ],
+ "hook": "Use a source-to-output number checklist",
+ "beats": [
+ "Introduce the original fixture: Synthetic invoice with 00123, 10.50, a date and letter O/zero examples.",
+ "Show the relevant source and actual output side by side; label expected output separately until tested",
+ "Point out one discrepancy or confirmed match and the next review step"
+ ],
+ "visual": "Annotated source/output fixture comparison",
+ "source_refs": [
+ "SRC-LOCAL",
+ "SRC-OCR-RESEARCH"
+ ],
+ "evidence_required": "Synthetic invoice with 00123, 10.50, a date and letter O/zero examples.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/verify-ocr-numbers",
+ "utm_content": "m02-s2-p2",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M02-S2.md"
+ },
+ {
+ "id": "M02-S2-P3",
+ "support_id": "M02-S2",
+ "main_id": "M02",
+ "status": "PROPOSED",
+ "format": "Misconception and limitation",
+ "channel": null,
+ "suggested_channels": [
+ "X",
+ "Threads"
+ ],
+ "hook": "Fluent text is not verified data",
+ "beats": [
+ "Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result",
+ "Explain the boundary: No financial recommendation; report character fidelity, not invented accuracy rates.",
+ "Offer a concrete check: Record corrections"
+ ],
+ "visual": "Two-panel assumption versus verification boundary",
+ "source_refs": [
+ "SRC-LOCAL",
+ "SRC-OCR-RESEARCH"
+ ],
+ "evidence_required": "Synthetic invoice with 00123, 10.50, a date and letter O/zero examples.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/verify-ocr-numbers",
+ "utm_content": "m02-s2-p3",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M02-S2.md"
+ },
+ {
+ "id": "M02-S3-P1",
+ "support_id": "M02-S3",
+ "main_id": "M02",
+ "status": "PROPOSED",
+ "format": "Practical walkthrough",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn"
+ ],
+ "hook": "Did every meaningful page make it through?",
+ "beats": [
+ "Open with the specific review problem: How do I confirm that a PDF with text and scanned pages is represented?",
+ "Give an actionable sequence: Inventory page types; Locate each page in output; Investigate missing or duplicate text",
+ "State the limit: No page-level OCR routing or page-count guarantee without observed evidence."
+ ],
+ "visual": "Decision/checklist tied to Inventory page types",
+ "source_refs": [
+ "SRC-LOCAL",
+ "SRC-OCR-RESEARCH"
+ ],
+ "evidence_required": "Three-page fixture with native text, image-only text and an intentional blank page.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/mixed-pdf-ocr-coverage",
+ "utm_content": "m02-s3-p1",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M02-S3.md"
+ },
+ {
+ "id": "M02-S3-P2",
+ "support_id": "M02-S3",
+ "main_id": "M02",
+ "status": "PROPOSED",
+ "format": "Annotated example",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn carousel",
+ "Instagram carousel"
+ ],
+ "hook": "Map three source pages to output passages",
+ "beats": [
+ "Introduce the original fixture: Three-page fixture with native text, image-only text and an intentional blank page.",
+ "Show the relevant source and actual output side by side; label expected output separately until tested",
+ "Point out one discrepancy or confirmed match and the next review step"
+ ],
+ "visual": "Annotated source/output fixture comparison",
+ "source_refs": [
+ "SRC-LOCAL",
+ "SRC-OCR-RESEARCH"
+ ],
+ "evidence_required": "Three-page fixture with native text, image-only text and an intentional blank page.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/mixed-pdf-ocr-coverage",
+ "utm_content": "m02-s3-p2",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M02-S3.md"
+ },
+ {
+ "id": "M02-S3-P3",
+ "support_id": "M02-S3",
+ "main_id": "M02",
+ "status": "PROPOSED",
+ "format": "Misconception and limitation",
+ "channel": null,
+ "suggested_channels": [
+ "X",
+ "Threads"
+ ],
+ "hook": "A blank page differs from a missing page",
+ "beats": [
+ "Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result",
+ "Explain the boundary: No page-level OCR routing or page-count guarantee without observed evidence.",
+ "Offer a concrete check: Investigate missing or duplicate text"
+ ],
+ "visual": "Two-panel assumption versus verification boundary",
+ "source_refs": [
+ "SRC-LOCAL",
+ "SRC-OCR-RESEARCH"
+ ],
+ "evidence_required": "Three-page fixture with native text, image-only text and an intentional blank page.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/mixed-pdf-ocr-coverage",
+ "utm_content": "m02-s3-p3",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M02-S3.md"
+ },
+ {
+ "id": "M03-S1-P1",
+ "support_id": "M03-S1",
+ "main_id": "M03",
+ "status": "PROPOSED",
+ "format": "Practical walkthrough",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn"
+ ],
+ "hook": "00123 and 123 may name different records",
+ "beats": [
+ "Open with the specific review problem: How do I distinguish identifiers from numeric quantities?",
+ "Give an actionable sequence: Identify identifier columns; Inspect stored value versus formatting; Compare converted output",
+ "State the limit: Display formatting and stored values may differ; conversion cannot restore lost digits."
+ ],
+ "visual": "Decision/checklist tied to Identify identifier columns",
+ "source_refs": [
+ "SRC-EXCEL",
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Workbook with text 00123, numeric 123 formatted as 00000 and a long ID.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/excel-leading-zeros-ai",
+ "utm_content": "m03-s1-p1",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M03-S1.md"
+ },
+ {
+ "id": "M03-S1-P2",
+ "support_id": "M03-S1",
+ "main_id": "M03",
+ "status": "PROPOSED",
+ "format": "Annotated example",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn carousel",
+ "Instagram carousel"
+ ],
+ "hook": "Compare text IDs with formatted numbers",
+ "beats": [
+ "Introduce the original fixture: Workbook with text 00123, numeric 123 formatted as 00000 and a long ID.",
+ "Show the relevant source and actual output side by side; label expected output separately until tested",
+ "Point out one discrepancy or confirmed match and the next review step"
+ ],
+ "visual": "Annotated source/output fixture comparison",
+ "source_refs": [
+ "SRC-EXCEL",
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Workbook with text 00123, numeric 123 formatted as 00000 and a long ID.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/excel-leading-zeros-ai",
+ "utm_content": "m03-s1-p2",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M03-S1.md"
+ },
+ {
+ "id": "M03-S1-P3",
+ "support_id": "M03-S1",
+ "main_id": "M03",
+ "status": "PROPOSED",
+ "format": "Misconception and limitation",
+ "channel": null,
+ "suggested_channels": [
+ "X",
+ "Threads"
+ ],
+ "hook": "Formatting is not the stored value",
+ "beats": [
+ "Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result",
+ "Explain the boundary: Display formatting and stored values may differ; conversion cannot restore lost digits.",
+ "Offer a concrete check: Compare converted output"
+ ],
+ "visual": "Two-panel assumption versus verification boundary",
+ "source_refs": [
+ "SRC-EXCEL",
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Workbook with text 00123, numeric 123 formatted as 00000 and a long ID.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/excel-leading-zeros-ai",
+ "utm_content": "m03-s1-p3",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M03-S1.md"
+ },
+ {
+ "id": "M03-S2-P1",
+ "support_id": "M03-S2",
+ "main_id": "M03",
+ "status": "PROPOSED",
+ "format": "Practical walkthrough",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn"
+ ],
+ "hook": "A formula is not proof of a fresh result",
+ "beats": [
+ "Open with the specific review problem: What evidence shows whether formula results are current?",
+ "Give an actionable sequence: Separate formulas from calculated values; Save a reviewed source copy; Inspect actual Markdown values",
+ "State the limit: Do not claim the converter recalculates formulas; record app and workbook provenance."
+ ],
+ "visual": "Decision/checklist tied to Separate formulas from calculated values",
+ "source_refs": [
+ "SRC-EXCEL",
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Workbook with formula, known result and a stale/absent cached-value case where reproducible.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/excel-formula-results-conversion",
+ "utm_content": "m03-s2-p1",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M03-S2.md"
+ },
+ {
+ "id": "M03-S2-P2",
+ "support_id": "M03-S2",
+ "main_id": "M03",
+ "status": "PROPOSED",
+ "format": "Annotated example",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn carousel",
+ "Instagram carousel"
+ ],
+ "hook": "Trace formula, saved value and Markdown output",
+ "beats": [
+ "Introduce the original fixture: Workbook with formula, known result and a stale/absent cached-value case where reproducible.",
+ "Show the relevant source and actual output side by side; label expected output separately until tested",
+ "Point out one discrepancy or confirmed match and the next review step"
+ ],
+ "visual": "Annotated source/output fixture comparison",
+ "source_refs": [
+ "SRC-EXCEL",
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Workbook with formula, known result and a stale/absent cached-value case where reproducible.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/excel-formula-results-conversion",
+ "utm_content": "m03-s2-p2",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M03-S2.md"
+ },
+ {
+ "id": "M03-S2-P3",
+ "support_id": "M03-S2",
+ "main_id": "M03",
+ "status": "PROPOSED",
+ "format": "Misconception and limitation",
+ "channel": null,
+ "suggested_channels": [
+ "X",
+ "Threads"
+ ],
+ "hook": "Conversion is not spreadsheet recalculation",
+ "beats": [
+ "Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result",
+ "Explain the boundary: Do not claim the converter recalculates formulas; record app and workbook provenance.",
+ "Offer a concrete check: Inspect actual Markdown values"
+ ],
+ "visual": "Two-panel assumption versus verification boundary",
+ "source_refs": [
+ "SRC-EXCEL",
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Workbook with formula, known result and a stale/absent cached-value case where reproducible.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/excel-formula-results-conversion",
+ "utm_content": "m03-s2-p3",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M03-S2.md"
+ },
+ {
+ "id": "M03-S3-P1",
+ "support_id": "M03-S3",
+ "main_id": "M03",
+ "status": "PROPOSED",
+ "format": "Practical walkthrough",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn"
+ ],
+ "hook": "Which unit belongs to this column?",
+ "beats": [
+ "Open with the specific review problem: How can I make multi-level spreadsheet labels unambiguous?",
+ "Give an actionable sequence: Identify grouped labels; Create a clearly labeled sharing copy; Compare row-column meaning",
+ "State the limit: Manual flattening must preserve meaning; no automatic merged-cell repair claim."
+ ],
+ "visual": "Decision/checklist tied to Identify grouped labels",
+ "source_refs": [
+ "SRC-EXCEL",
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Small two-level header workbook and manually flattened copy with units retained.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/merged-excel-headers-markdown",
+ "utm_content": "m03-s3-p1",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M03-S3.md"
+ },
+ {
+ "id": "M03-S3-P2",
+ "support_id": "M03-S3",
+ "main_id": "M03",
+ "status": "PROPOSED",
+ "format": "Annotated example",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn carousel",
+ "Instagram carousel"
+ ],
+ "hook": "Before-and-after header map with real values",
+ "beats": [
+ "Introduce the original fixture: Small two-level header workbook and manually flattened copy with units retained.",
+ "Show the relevant source and actual output side by side; label expected output separately until tested",
+ "Point out one discrepancy or confirmed match and the next review step"
+ ],
+ "visual": "Annotated source/output fixture comparison",
+ "source_refs": [
+ "SRC-EXCEL",
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Small two-level header workbook and manually flattened copy with units retained.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/merged-excel-headers-markdown",
+ "utm_content": "m03-s3-p2",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M03-S3.md"
+ },
+ {
+ "id": "M03-S3-P3",
+ "support_id": "M03-S3",
+ "main_id": "M03",
+ "status": "PROPOSED",
+ "format": "Misconception and limitation",
+ "channel": null,
+ "suggested_channels": [
+ "X",
+ "Threads"
+ ],
+ "hook": "Blank merged cells do not mean missing data",
+ "beats": [
+ "Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result",
+ "Explain the boundary: Manual flattening must preserve meaning; no automatic merged-cell repair claim.",
+ "Offer a concrete check: Compare row-column meaning"
+ ],
+ "visual": "Two-panel assumption versus verification boundary",
+ "source_refs": [
+ "SRC-EXCEL",
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Small two-level header workbook and manually flattened copy with units retained.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/merged-excel-headers-markdown",
+ "utm_content": "m03-s3-p3",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M03-S3.md"
+ },
+ {
+ "id": "M04-S1-P1",
+ "support_id": "M04-S1",
+ "main_id": "M04",
+ "status": "PROPOSED",
+ "format": "Practical walkthrough",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn"
+ ],
+ "hook": "Bold text and a heading are different inputs",
+ "beats": [
+ "Open with the specific review problem: How do semantic styles differ from large bold text?",
+ "Give an actionable sequence: Inspect Word styles; Apply a consistent hierarchy; Check Markdown heading levels",
+ "State the limit: General semantic-heading sources do not prove exact DOCX parser behavior; test it."
+ ],
+ "visual": "Decision/checklist tied to Inspect Word styles",
+ "source_refs": [
+ "SRC-HEADINGS",
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "DOCX pair with visually similar bold text versus actual heading styles.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/word-heading-styles-markdown",
+ "utm_content": "m04-s1-p1",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M04-S1.md"
+ },
+ {
+ "id": "M04-S1-P2",
+ "support_id": "M04-S1",
+ "main_id": "M04",
+ "status": "PROPOSED",
+ "format": "Annotated example",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn carousel",
+ "Instagram carousel"
+ ],
+ "hook": "Compare look-alike headings after conversion",
+ "beats": [
+ "Introduce the original fixture: DOCX pair with visually similar bold text versus actual heading styles.",
+ "Show the relevant source and actual output side by side; label expected output separately until tested",
+ "Point out one discrepancy or confirmed match and the next review step"
+ ],
+ "visual": "Annotated source/output fixture comparison",
+ "source_refs": [
+ "SRC-HEADINGS",
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "DOCX pair with visually similar bold text versus actual heading styles.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/word-heading-styles-markdown",
+ "utm_content": "m04-s1-p2",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M04-S1.md"
+ },
+ {
+ "id": "M04-S1-P3",
+ "support_id": "M04-S1",
+ "main_id": "M04",
+ "status": "PROPOSED",
+ "format": "Misconception and limitation",
+ "channel": null,
+ "suggested_channels": [
+ "X",
+ "Threads"
+ ],
+ "hook": "Check hierarchy rather than font size",
+ "beats": [
+ "Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result",
+ "Explain the boundary: General semantic-heading sources do not prove exact DOCX parser behavior; test it.",
+ "Offer a concrete check: Check Markdown heading levels"
+ ],
+ "visual": "Two-panel assumption versus verification boundary",
+ "source_refs": [
+ "SRC-HEADINGS",
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "DOCX pair with visually similar bold text versus actual heading styles.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/word-heading-styles-markdown",
+ "utm_content": "m04-s1-p3",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M04-S1.md"
+ },
+ {
+ "id": "M04-S2-P1",
+ "support_id": "M04-S2",
+ "main_id": "M04",
+ "status": "PROPOSED",
+ "format": "Practical walkthrough",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn"
+ ],
+ "hook": "A sub-step should not become a new instruction",
+ "beats": [
+ "Open with the specific review problem: How do I verify parent-child relationships in converted lists?",
+ "Give an actionable sequence: Identify list levels; Compare item order and nesting; Repair a working copy and recheck",
+ "State the limit: Do not promise lossless numbering; preserve the original."
+ ],
+ "visual": "Decision/checklist tied to Identify list levels",
+ "source_refs": [
+ "SRC-HEADINGS",
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "DOCX with nested numbered and bulleted items, including restarted numbering.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/nested-word-lists-markdown",
+ "utm_content": "m04-s2-p1",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M04-S2.md"
+ },
+ {
+ "id": "M04-S2-P2",
+ "support_id": "M04-S2",
+ "main_id": "M04",
+ "status": "PROPOSED",
+ "format": "Annotated example",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn carousel",
+ "Instagram carousel"
+ ],
+ "hook": "Map a parent item to its child steps",
+ "beats": [
+ "Introduce the original fixture: DOCX with nested numbered and bulleted items, including restarted numbering.",
+ "Show the relevant source and actual output side by side; label expected output separately until tested",
+ "Point out one discrepancy or confirmed match and the next review step"
+ ],
+ "visual": "Annotated source/output fixture comparison",
+ "source_refs": [
+ "SRC-HEADINGS",
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "DOCX with nested numbered and bulleted items, including restarted numbering.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/nested-word-lists-markdown",
+ "utm_content": "m04-s2-p2",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M04-S2.md"
+ },
+ {
+ "id": "M04-S2-P3",
+ "support_id": "M04-S2",
+ "main_id": "M04",
+ "status": "PROPOSED",
+ "format": "Misconception and limitation",
+ "channel": null,
+ "suggested_channels": [
+ "X",
+ "Threads"
+ ],
+ "hook": "Correct words can have the wrong nesting",
+ "beats": [
+ "Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result",
+ "Explain the boundary: Do not promise lossless numbering; preserve the original.",
+ "Offer a concrete check: Repair a working copy and recheck"
+ ],
+ "visual": "Two-panel assumption versus verification boundary",
+ "source_refs": [
+ "SRC-HEADINGS",
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "DOCX with nested numbered and bulleted items, including restarted numbering.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/nested-word-lists-markdown",
+ "utm_content": "m04-s2-p3",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M04-S2.md"
+ },
+ {
+ "id": "M04-S3-P1",
+ "support_id": "M04-S3",
+ "main_id": "M04",
+ "status": "PROPOSED",
+ "format": "Practical walkthrough",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn"
+ ],
+ "hook": "Which draft did you mean to share?",
+ "beats": [
+ "Open with the specific review problem: Which revision view and comments should a shared document represent?",
+ "Give an actionable sequence: Decide the intended revision; Create a reviewed sharing copy; Compare extracted text with that copy",
+ "State the limit: Do not silently accept changes or claim all comments are extracted/removed."
+ ],
+ "visual": "Decision/checklist tied to Decide the intended revision",
+ "source_refs": [
+ "SRC-HEADINGS",
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Synthetic DOCX containing a harmless tracked replacement and comment; record the chosen revision view.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/word-revisions-ai-sharing",
+ "utm_content": "m04-s3-p1",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M04-S3.md"
+ },
+ {
+ "id": "M04-S3-P2",
+ "support_id": "M04-S3",
+ "main_id": "M04",
+ "status": "PROPOSED",
+ "format": "Annotated example",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn carousel",
+ "Instagram carousel"
+ ],
+ "hook": "Compare original, revised and sharing views",
+ "beats": [
+ "Introduce the original fixture: Synthetic DOCX containing a harmless tracked replacement and comment; record the chosen revision view.",
+ "Show the relevant source and actual output side by side; label expected output separately until tested",
+ "Point out one discrepancy or confirmed match and the next review step"
+ ],
+ "visual": "Annotated source/output fixture comparison",
+ "source_refs": [
+ "SRC-HEADINGS",
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Synthetic DOCX containing a harmless tracked replacement and comment; record the chosen revision view.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/word-revisions-ai-sharing",
+ "utm_content": "m04-s3-p2",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M04-S3.md"
+ },
+ {
+ "id": "M04-S3-P3",
+ "support_id": "M04-S3",
+ "main_id": "M04",
+ "status": "PROPOSED",
+ "format": "Misconception and limitation",
+ "channel": null,
+ "suggested_channels": [
+ "X",
+ "Threads"
+ ],
+ "hook": "Hidden review text needs an explicit decision",
+ "beats": [
+ "Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result",
+ "Explain the boundary: Do not silently accept changes or claim all comments are extracted/removed.",
+ "Offer a concrete check: Compare extracted text with that copy"
+ ],
+ "visual": "Two-panel assumption versus verification boundary",
+ "source_refs": [
+ "SRC-HEADINGS",
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Synthetic DOCX containing a harmless tracked replacement and comment; record the chosen revision view.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/word-revisions-ai-sharing",
+ "utm_content": "m04-s3-p3",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M04-S3.md"
+ },
+ {
+ "id": "M05-S1-P1",
+ "support_id": "M05-S1",
+ "main_id": "M05",
+ "status": "PROPOSED",
+ "format": "Practical walkthrough",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn"
+ ],
+ "hook": "The slide may not contain the whole explanation",
+ "beats": [
+ "Open with the specific review problem: Are important speaker notes represented in this output?",
+ "Give an actionable sequence: Inventory slides with notes; Compare slide text and note text; Provide missing context explicitly",
+ "State the limit: Notes extraction is a test question, not an advertised verified feature."
+ ],
+ "visual": "Decision/checklist tied to Inventory slides with notes",
+ "source_refs": [
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Three-slide deck with notes on one slide and no notes on another.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/powerpoint-speaker-notes-markdown",
+ "utm_content": "m05-s1-p1",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M05-S1.md"
+ },
+ {
+ "id": "M05-S1-P2",
+ "support_id": "M05-S1",
+ "main_id": "M05",
+ "status": "PROPOSED",
+ "format": "Annotated example",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn carousel",
+ "Instagram carousel"
+ ],
+ "hook": "Make a slide-text versus notes checklist",
+ "beats": [
+ "Introduce the original fixture: Three-slide deck with notes on one slide and no notes on another.",
+ "Show the relevant source and actual output side by side; label expected output separately until tested",
+ "Point out one discrepancy or confirmed match and the next review step"
+ ],
+ "visual": "Annotated source/output fixture comparison",
+ "source_refs": [
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Three-slide deck with notes on one slide and no notes on another.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/powerpoint-speaker-notes-markdown",
+ "utm_content": "m05-s1-p2",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M05-S1.md"
+ },
+ {
+ "id": "M05-S1-P3",
+ "support_id": "M05-S1",
+ "main_id": "M05",
+ "status": "PROPOSED",
+ "format": "Misconception and limitation",
+ "channel": null,
+ "suggested_channels": [
+ "X",
+ "Threads"
+ ],
+ "hook": "Do not assume notes survived conversion",
+ "beats": [
+ "Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result",
+ "Explain the boundary: Notes extraction is a test question, not an advertised verified feature.",
+ "Offer a concrete check: Provide missing context explicitly"
+ ],
+ "visual": "Two-panel assumption versus verification boundary",
+ "source_refs": [
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Three-slide deck with notes on one slide and no notes on another.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/powerpoint-speaker-notes-markdown",
+ "utm_content": "m05-s1-p3",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M05-S1.md"
+ },
+ {
+ "id": "M05-S2-P1",
+ "support_id": "M05-S2",
+ "main_id": "M05",
+ "status": "PROPOSED",
+ "format": "Practical walkthrough",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn"
+ ],
+ "hook": "A chart title is not its data",
+ "beats": [
+ "Open with the specific review problem: What chart information must accompany a text-only slide export?",
+ "Give an actionable sequence: Identify the question and chart evidence; Record axes units and legend; Keep the visual when needed",
+ "State the limit: Never infer values that were not readable or claim automatic chart understanding."
+ ],
+ "visual": "Decision/checklist tied to Identify the question and chart evidence",
+ "source_refs": [
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Original chart with labels, units and a visible trend; write a checked textual description.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/slide-chart-context-ai",
+ "utm_content": "m05-s2-p1",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M05-S2.md"
+ },
+ {
+ "id": "M05-S2-P2",
+ "support_id": "M05-S2",
+ "main_id": "M05",
+ "status": "PROPOSED",
+ "format": "Annotated example",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn carousel",
+ "Instagram carousel"
+ ],
+ "hook": "Show the labels a text description needs",
+ "beats": [
+ "Introduce the original fixture: Original chart with labels, units and a visible trend; write a checked textual description.",
+ "Show the relevant source and actual output side by side; label expected output separately until tested",
+ "Point out one discrepancy or confirmed match and the next review step"
+ ],
+ "visual": "Annotated source/output fixture comparison",
+ "source_refs": [
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Original chart with labels, units and a visible trend; write a checked textual description.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/slide-chart-context-ai",
+ "utm_content": "m05-s2-p2",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M05-S2.md"
+ },
+ {
+ "id": "M05-S2-P3",
+ "support_id": "M05-S2",
+ "main_id": "M05",
+ "status": "PROPOSED",
+ "format": "Misconception and limitation",
+ "channel": null,
+ "suggested_channels": [
+ "X",
+ "Threads"
+ ],
+ "hook": "Keep the chart when shape is the evidence",
+ "beats": [
+ "Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result",
+ "Explain the boundary: Never infer values that were not readable or claim automatic chart understanding.",
+ "Offer a concrete check: Keep the visual when needed"
+ ],
+ "visual": "Two-panel assumption versus verification boundary",
+ "source_refs": [
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Original chart with labels, units and a visible trend; write a checked textual description.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/slide-chart-context-ai",
+ "utm_content": "m05-s2-p3",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M05-S2.md"
+ },
+ {
+ "id": "M05-S3-P1",
+ "support_id": "M05-S3",
+ "main_id": "M05",
+ "status": "PROPOSED",
+ "format": "Practical walkthrough",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn"
+ ],
+ "hook": "Repeated slide titles can hide a sequence change",
+ "beats": [
+ "Open with the specific review problem: How do I retain the sequence needed to interpret a deck?",
+ "Give an actionable sequence: Map slide sequence; Check title-to-body association; Verify rearranged or repeated titles",
+ "State the limit: No artificial page/slide numbers unless traced to the source."
+ ],
+ "visual": "Decision/checklist tied to Map slide sequence",
+ "source_refs": [
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Deck with repeated titles, a section slide and a sequence-dependent explanation.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/slide-order-markdown",
+ "utm_content": "m05-s3-p1",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M05-S3.md"
+ },
+ {
+ "id": "M05-S3-P2",
+ "support_id": "M05-S3",
+ "main_id": "M05",
+ "status": "PROPOSED",
+ "format": "Annotated example",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn carousel",
+ "Instagram carousel"
+ ],
+ "hook": "Trace one narrative across three slides",
+ "beats": [
+ "Introduce the original fixture: Deck with repeated titles, a section slide and a sequence-dependent explanation.",
+ "Show the relevant source and actual output side by side; label expected output separately until tested",
+ "Point out one discrepancy or confirmed match and the next review step"
+ ],
+ "visual": "Annotated source/output fixture comparison",
+ "source_refs": [
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Deck with repeated titles, a section slide and a sequence-dependent explanation.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/slide-order-markdown",
+ "utm_content": "m05-s3-p2",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M05-S3.md"
+ },
+ {
+ "id": "M05-S3-P3",
+ "support_id": "M05-S3",
+ "main_id": "M05",
+ "status": "PROPOSED",
+ "format": "Misconception and limitation",
+ "channel": null,
+ "suggested_channels": [
+ "X",
+ "Threads"
+ ],
+ "hook": "Order is part of the context",
+ "beats": [
+ "Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result",
+ "Explain the boundary: No artificial page/slide numbers unless traced to the source.",
+ "Offer a concrete check: Verify rearranged or repeated titles"
+ ],
+ "visual": "Two-panel assumption versus verification boundary",
+ "source_refs": [
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Deck with repeated titles, a section slide and a sequence-dependent explanation.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/slide-order-markdown",
+ "utm_content": "m05-s3-p3",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M05-S3.md"
+ },
+ {
+ "id": "M06-S1-P1",
+ "support_id": "M06-S1",
+ "main_id": "M06",
+ "status": "PROPOSED",
+ "format": "Practical walkthrough",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn"
+ ],
+ "hook": "A comma inside a name is not a new column",
+ "beats": [
+ "Open with the specific review problem: How do I verify that quoted separators remain inside a cell?",
+ "Give an actionable sequence: Identify separator and quoting; Test embedded commas and newlines; Check resulting row widths",
+ "State the limit: Do not recommend global comma replacement or splitting on commas without a CSV parser."
+ ],
+ "visual": "Decision/checklist tied to Identify separator and quoting",
+ "source_refs": [
+ "SRC-CSV",
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Synthetic CSV with comma inside quotes, escaped quote and embedded newline.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/csv-quoted-cells-markdown",
+ "utm_content": "m06-s1-p1",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M06-S1.md"
+ },
+ {
+ "id": "M06-S1-P2",
+ "support_id": "M06-S1",
+ "main_id": "M06",
+ "status": "PROPOSED",
+ "format": "Annotated example",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn carousel",
+ "Instagram carousel"
+ ],
+ "hook": "Show one quoted row and its expected cells",
+ "beats": [
+ "Introduce the original fixture: Synthetic CSV with comma inside quotes, escaped quote and embedded newline.",
+ "Show the relevant source and actual output side by side; label expected output separately until tested",
+ "Point out one discrepancy or confirmed match and the next review step"
+ ],
+ "visual": "Annotated source/output fixture comparison",
+ "source_refs": [
+ "SRC-CSV",
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Synthetic CSV with comma inside quotes, escaped quote and embedded newline.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/csv-quoted-cells-markdown",
+ "utm_content": "m06-s1-p2",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M06-S1.md"
+ },
+ {
+ "id": "M06-S1-P3",
+ "support_id": "M06-S1",
+ "main_id": "M06",
+ "status": "PROPOSED",
+ "format": "Misconception and limitation",
+ "channel": null,
+ "suggested_channels": [
+ "X",
+ "Threads"
+ ],
+ "hook": "Line breaks can belong inside one cell",
+ "beats": [
+ "Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result",
+ "Explain the boundary: Do not recommend global comma replacement or splitting on commas without a CSV parser.",
+ "Offer a concrete check: Check resulting row widths"
+ ],
+ "visual": "Two-panel assumption versus verification boundary",
+ "source_refs": [
+ "SRC-CSV",
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Synthetic CSV with comma inside quotes, escaped quote and embedded newline.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/csv-quoted-cells-markdown",
+ "utm_content": "m06-s1-p3",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M06-S1.md"
+ },
+ {
+ "id": "M06-S2-P1",
+ "support_id": "M06-S2",
+ "main_id": "M06",
+ "status": "PROPOSED",
+ "format": "Practical walkthrough",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn"
+ ],
+ "hook": "Broken accents are a data problem",
+ "beats": [
+ "Open with the specific review problem: How can I diagnose corrupted text before using converted output?",
+ "Give an actionable sequence: Identify the source encoding; Compare representative characters; Export a verified copy",
+ "State the limit: Do not claim encoding detection is infallible or imply interface languages change OCR."
+ ],
+ "visual": "Decision/checklist tied to Identify the source encoding",
+ "source_refs": [
+ "SRC-CSV",
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "UTF-8 sample with accented names and a deliberately misdecoded demonstration; no personal data.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/csv-encoding-ai",
+ "utm_content": "m06-s2-p1",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M06-S2.md"
+ },
+ {
+ "id": "M06-S2-P2",
+ "support_id": "M06-S2",
+ "main_id": "M06",
+ "status": "PROPOSED",
+ "format": "Annotated example",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn carousel",
+ "Instagram carousel"
+ ],
+ "hook": "Compare the same characters before and after decoding",
+ "beats": [
+ "Introduce the original fixture: UTF-8 sample with accented names and a deliberately misdecoded demonstration; no personal data.",
+ "Show the relevant source and actual output side by side; label expected output separately until tested",
+ "Point out one discrepancy or confirmed match and the next review step"
+ ],
+ "visual": "Annotated source/output fixture comparison",
+ "source_refs": [
+ "SRC-CSV",
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "UTF-8 sample with accented names and a deliberately misdecoded demonstration; no personal data.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/csv-encoding-ai",
+ "utm_content": "m06-s2-p2",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M06-S2.md"
+ },
+ {
+ "id": "M06-S2-P3",
+ "support_id": "M06-S2",
+ "main_id": "M06",
+ "status": "PROPOSED",
+ "format": "Misconception and limitation",
+ "channel": null,
+ "suggested_channels": [
+ "X",
+ "Threads"
+ ],
+ "hook": "Changing the filename does not change encoding",
+ "beats": [
+ "Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result",
+ "Explain the boundary: Do not claim encoding detection is infallible or imply interface languages change OCR.",
+ "Offer a concrete check: Export a verified copy"
+ ],
+ "visual": "Two-panel assumption versus verification boundary",
+ "source_refs": [
+ "SRC-CSV",
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "UTF-8 sample with accented names and a deliberately misdecoded demonstration; no personal data.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/csv-encoding-ai",
+ "utm_content": "m06-s2-p3",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M06-S2.md"
+ },
+ {
+ "id": "M06-S3-P1",
+ "support_id": "M06-S3",
+ "main_id": "M06",
+ "status": "PROPOSED",
+ "format": "Practical walkthrough",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn"
+ ],
+ "hook": "An empty cell is not a shifted column",
+ "beats": [
+ "Open with the specific review problem: How do missing delimiters differ from intentionally blank values?",
+ "Give an actionable sequence: Define expected columns; Compare blank and absent fields; Validate a reviewed sample",
+ "State the limit: Keep missing-value decisions explicit; do not fill invented values."
+ ],
+ "visual": "Decision/checklist tied to Define expected columns",
+ "source_refs": [
+ "SRC-CSV",
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Rows with a blank middle cell, missing last field and extra delimiter.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/csv-empty-missing-fields",
+ "utm_content": "m06-s3-p1",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M06-S3.md"
+ },
+ {
+ "id": "M06-S3-P2",
+ "support_id": "M06-S3",
+ "main_id": "M06",
+ "status": "PROPOSED",
+ "format": "Annotated example",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn carousel",
+ "Instagram carousel"
+ ],
+ "hook": "Compare three rows with different shapes",
+ "beats": [
+ "Introduce the original fixture: Rows with a blank middle cell, missing last field and extra delimiter.",
+ "Show the relevant source and actual output side by side; label expected output separately until tested",
+ "Point out one discrepancy or confirmed match and the next review step"
+ ],
+ "visual": "Annotated source/output fixture comparison",
+ "source_refs": [
+ "SRC-CSV",
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Rows with a blank middle cell, missing last field and extra delimiter.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/csv-empty-missing-fields",
+ "utm_content": "m06-s3-p2",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M06-S3.md"
+ },
+ {
+ "id": "M06-S3-P3",
+ "support_id": "M06-S3",
+ "main_id": "M06",
+ "status": "PROPOSED",
+ "format": "Misconception and limitation",
+ "channel": null,
+ "suggested_channels": [
+ "X",
+ "Threads"
+ ],
+ "hook": "Do not guess what missing data should mean",
+ "beats": [
+ "Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result",
+ "Explain the boundary: Keep missing-value decisions explicit; do not fill invented values.",
+ "Offer a concrete check: Validate a reviewed sample"
+ ],
+ "visual": "Two-panel assumption versus verification boundary",
+ "source_refs": [
+ "SRC-CSV",
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Rows with a blank middle cell, missing last field and extra delimiter.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/csv-empty-missing-fields",
+ "utm_content": "m06-s3-p3",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M06-S3.md"
+ },
+ {
+ "id": "M07-S1-P1",
+ "support_id": "M07-S1",
+ "main_id": "M07",
+ "status": "PROPOSED",
+ "format": "Practical walkthrough",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn"
+ ],
+ "hook": "A batch can contain different review tasks",
+ "beats": [
+ "Open with the specific review problem: How do I organize a supported mixed-format batch?",
+ "Give an actionable sequence: Check each format against current UI; Group files by review needs; Track each output separately",
+ "State the limit: Not a worker architecture article; no unsupported formats or uniform-speed promise."
+ ],
+ "visual": "Decision/checklist tied to Check each format against current UI",
+ "source_refs": [
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Small PDF, DOCX and image fixture set with identifiable content in each.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/mixed-file-batch-llmiser",
+ "utm_content": "m07-s1-p1",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M07-S1.md"
+ },
+ {
+ "id": "M07-S1-P2",
+ "support_id": "M07-S1",
+ "main_id": "M07",
+ "status": "PROPOSED",
+ "format": "Annotated example",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn carousel",
+ "Instagram carousel"
+ ],
+ "hook": "Build a file-to-output checklist",
+ "beats": [
+ "Introduce the original fixture: Small PDF, DOCX and image fixture set with identifiable content in each.",
+ "Show the relevant source and actual output side by side; label expected output separately until tested",
+ "Point out one discrepancy or confirmed match and the next review step"
+ ],
+ "visual": "Annotated source/output fixture comparison",
+ "source_refs": [
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Small PDF, DOCX and image fixture set with identifiable content in each.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/mixed-file-batch-llmiser",
+ "utm_content": "m07-s1-p2",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M07-S1.md"
+ },
+ {
+ "id": "M07-S1-P3",
+ "support_id": "M07-S1",
+ "main_id": "M07",
+ "status": "PROPOSED",
+ "format": "Misconception and limitation",
+ "channel": null,
+ "suggested_channels": [
+ "X",
+ "Threads"
+ ],
+ "hook": "One successful file does not prove the whole batch",
+ "beats": [
+ "Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result",
+ "Explain the boundary: Not a worker architecture article; no unsupported formats or uniform-speed promise.",
+ "Offer a concrete check: Track each output separately"
+ ],
+ "visual": "Two-panel assumption versus verification boundary",
+ "source_refs": [
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Small PDF, DOCX and image fixture set with identifiable content in each.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/mixed-file-batch-llmiser",
+ "utm_content": "m07-s1-p3",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M07-S1.md"
+ },
+ {
+ "id": "M07-S2-P1",
+ "support_id": "M07-S2",
+ "main_id": "M07",
+ "status": "PROPOSED",
+ "format": "Practical walkthrough",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn"
+ ],
+ "hook": "Keep the results that already finished",
+ "beats": [
+ "Open with the specific review problem: How do I recover when some files finish and others fail?",
+ "Give an actionable sequence: Identify completed and failed items; Save successful results; Retry only where current UI supports it",
+ "State the limit: Do not create production load; verify retry controls and avoid automatic full-batch reuploads."
+ ],
+ "visual": "Decision/checklist tied to Identify completed and failed items",
+ "source_refs": [
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "One valid document plus an intentionally invalid supported-format fixture in a controlled local/test environment.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/partial-batch-conversion",
+ "utm_content": "m07-s2-p1",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M07-S2.md"
+ },
+ {
+ "id": "M07-S2-P2",
+ "support_id": "M07-S2",
+ "main_id": "M07",
+ "status": "PROPOSED",
+ "format": "Annotated example",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn carousel",
+ "Instagram carousel"
+ ],
+ "hook": "Walk through a mixed success-and-failure queue",
+ "beats": [
+ "Introduce the original fixture: One valid document plus an intentionally invalid supported-format fixture in a controlled local/test environment.",
+ "Show the relevant source and actual output side by side; label expected output separately until tested",
+ "Point out one discrepancy or confirmed match and the next review step"
+ ],
+ "visual": "Annotated source/output fixture comparison",
+ "source_refs": [
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "One valid document plus an intentionally invalid supported-format fixture in a controlled local/test environment.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/partial-batch-conversion",
+ "utm_content": "m07-s2-p2",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M07-S2.md"
+ },
+ {
+ "id": "M07-S2-P3",
+ "support_id": "M07-S2",
+ "main_id": "M07",
+ "status": "PROPOSED",
+ "format": "Misconception and limitation",
+ "channel": null,
+ "suggested_channels": [
+ "X",
+ "Threads"
+ ],
+ "hook": "Retry is not the same as starting everything over",
+ "beats": [
+ "Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result",
+ "Explain the boundary: Do not create production load; verify retry controls and avoid automatic full-batch reuploads.",
+ "Offer a concrete check: Retry only where current UI supports it"
+ ],
+ "visual": "Two-panel assumption versus verification boundary",
+ "source_refs": [
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "One valid document plus an intentionally invalid supported-format fixture in a controlled local/test environment.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/partial-batch-conversion",
+ "utm_content": "m07-s2-p3",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M07-S2.md"
+ },
+ {
+ "id": "M07-S3-P1",
+ "support_id": "M07-S3",
+ "main_id": "M07",
+ "status": "PROPOSED",
+ "format": "Practical walkthrough",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn"
+ ],
+ "hook": "Batch count and file size are different limits",
+ "beats": [
+ "Open with the specific review problem: How do I plan a batch that meets documented per-file and queue limits?",
+ "Give an actionable sequence: Read current limits; Separate queue count from file size; Choose a smaller source or batch",
+ "State the limit: Do not promise splitting the queue fixes an oversized individual file."
+ ],
+ "visual": "Decision/checklist tied to Read current limits",
+ "source_refs": [
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Local file-size/count inventory and UI validation checks; no oversized production upload necessary.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/split-batch-upload-limits",
+ "utm_content": "m07-s3-p1",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M07-S3.md"
+ },
+ {
+ "id": "M07-S3-P2",
+ "support_id": "M07-S3",
+ "main_id": "M07",
+ "status": "PROPOSED",
+ "format": "Annotated example",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn carousel",
+ "Instagram carousel"
+ ],
+ "hook": "Sort a sample inventory into valid batches",
+ "beats": [
+ "Introduce the original fixture: Local file-size/count inventory and UI validation checks; no oversized production upload necessary.",
+ "Show the relevant source and actual output side by side; label expected output separately until tested",
+ "Point out one discrepancy or confirmed match and the next review step"
+ ],
+ "visual": "Annotated source/output fixture comparison",
+ "source_refs": [
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Local file-size/count inventory and UI validation checks; no oversized production upload necessary.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/split-batch-upload-limits",
+ "utm_content": "m07-s3-p2",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M07-S3.md"
+ },
+ {
+ "id": "M07-S3-P3",
+ "support_id": "M07-S3",
+ "main_id": "M07",
+ "status": "PROPOSED",
+ "format": "Misconception and limitation",
+ "channel": null,
+ "suggested_channels": [
+ "X",
+ "Threads"
+ ],
+ "hook": "An oversized file stays oversized in a smaller batch",
+ "beats": [
+ "Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result",
+ "Explain the boundary: Do not promise splitting the queue fixes an oversized individual file.",
+ "Offer a concrete check: Choose a smaller source or batch"
+ ],
+ "visual": "Two-panel assumption versus verification boundary",
+ "source_refs": [
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Local file-size/count inventory and UI validation checks; no oversized production upload necessary.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/split-batch-upload-limits",
+ "utm_content": "m07-s3-p3",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M07-S3.md"
+ },
+ {
+ "id": "M08-S1-P1",
+ "support_id": "M08-S1",
+ "main_id": "M08",
+ "status": "PROPOSED",
+ "format": "Practical walkthrough",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn"
+ ],
+ "hook": "What did Clean actually change?",
+ "beats": [
+ "Open with the specific review problem: What changes between Standard and Clean for the same input?",
+ "Give an actionable sequence: Use one fixture; Compare source line and whitespace; Check content retained",
+ "State the limit: Do not claim semantic cleanup, deduplication or privacy sanitization."
+ ],
+ "visual": "Decision/checklist tied to Use one fixture",
+ "source_refs": [
+ "SRC-LOCAL",
+ "SRC-MARKDOWN"
+ ],
+ "evidence_required": "Same short Markdown/document input under both profiles, saved as an actual diff.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/llmiser-standard-vs-clean",
+ "utm_content": "m08-s1-p1",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M08-S1.md"
+ },
+ {
+ "id": "M08-S1-P2",
+ "support_id": "M08-S1",
+ "main_id": "M08",
+ "status": "PROPOSED",
+ "format": "Annotated example",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn carousel",
+ "Instagram carousel"
+ ],
+ "hook": "Use a two-column output diff",
+ "beats": [
+ "Introduce the original fixture: Same short Markdown/document input under both profiles, saved as an actual diff.",
+ "Show the relevant source and actual output side by side; label expected output separately until tested",
+ "Point out one discrepancy or confirmed match and the next review step"
+ ],
+ "visual": "Annotated source/output fixture comparison",
+ "source_refs": [
+ "SRC-LOCAL",
+ "SRC-MARKDOWN"
+ ],
+ "evidence_required": "Same short Markdown/document input under both profiles, saved as an actual diff.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/llmiser-standard-vs-clean",
+ "utm_content": "m08-s1-p2",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M08-S1.md"
+ },
+ {
+ "id": "M08-S1-P3",
+ "support_id": "M08-S1",
+ "main_id": "M08",
+ "status": "PROPOSED",
+ "format": "Misconception and limitation",
+ "channel": null,
+ "suggested_channels": [
+ "X",
+ "Threads"
+ ],
+ "hook": "Cleaner formatting is not a content audit",
+ "beats": [
+ "Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result",
+ "Explain the boundary: Do not claim semantic cleanup, deduplication or privacy sanitization.",
+ "Offer a concrete check: Check content retained"
+ ],
+ "visual": "Two-panel assumption versus verification boundary",
+ "source_refs": [
+ "SRC-LOCAL",
+ "SRC-MARKDOWN"
+ ],
+ "evidence_required": "Same short Markdown/document input under both profiles, saved as an actual diff.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/llmiser-standard-vs-clean",
+ "utm_content": "m08-s1-p3",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M08-S1.md"
+ },
+ {
+ "id": "M08-S2-P1",
+ "support_id": "M08-S2",
+ "main_id": "M08",
+ "status": "PROPOSED",
+ "format": "Practical walkthrough",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn"
+ ],
+ "hook": "Less whitespace can change how Markdown reads",
+ "beats": [
+ "Open with the specific review problem: What needs checking when compact formatting removes separators or spacing?",
+ "Give an actionable sequence: Inspect the actual transformations; Check structure-sensitive content; Choose readability versus compactness",
+ "State the limit: No assumed token savings or universally valid table preservation; record unexpected changes."
+ ],
+ "visual": "Decision/checklist tied to Inspect the actual transformations",
+ "source_refs": [
+ "SRC-LOCAL",
+ "SRC-MARKDOWN"
+ ],
+ "evidence_required": "Fixture with blank lines, horizontal rules, table syntax and hyphen sequences; compare all bytes.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/llmiser-compact-markdown-check",
+ "utm_content": "m08-s2-p1",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M08-S2.md"
+ },
+ {
+ "id": "M08-S2-P2",
+ "support_id": "M08-S2",
+ "main_id": "M08",
+ "status": "PROPOSED",
+ "format": "Annotated example",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn carousel",
+ "Instagram carousel"
+ ],
+ "hook": "Compare a structure-sensitive fragment",
+ "beats": [
+ "Introduce the original fixture: Fixture with blank lines, horizontal rules, table syntax and hyphen sequences; compare all bytes.",
+ "Show the relevant source and actual output side by side; label expected output separately until tested",
+ "Point out one discrepancy or confirmed match and the next review step"
+ ],
+ "visual": "Annotated source/output fixture comparison",
+ "source_refs": [
+ "SRC-LOCAL",
+ "SRC-MARKDOWN"
+ ],
+ "evidence_required": "Fixture with blank lines, horizontal rules, table syntax and hyphen sequences; compare all bytes.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/llmiser-compact-markdown-check",
+ "utm_content": "m08-s2-p2",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M08-S2.md"
+ },
+ {
+ "id": "M08-S2-P3",
+ "support_id": "M08-S2",
+ "main_id": "M08",
+ "status": "PROPOSED",
+ "format": "Misconception and limitation",
+ "channel": null,
+ "suggested_channels": [
+ "X",
+ "Threads"
+ ],
+ "hook": "The shortest output is not always the best input",
+ "beats": [
+ "Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result",
+ "Explain the boundary: No assumed token savings or universally valid table preservation; record unexpected changes.",
+ "Offer a concrete check: Choose readability versus compactness"
+ ],
+ "visual": "Two-panel assumption versus verification boundary",
+ "source_refs": [
+ "SRC-LOCAL",
+ "SRC-MARKDOWN"
+ ],
+ "evidence_required": "Fixture with blank lines, horizontal rules, table syntax and hyphen sequences; compare all bytes.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/llmiser-compact-markdown-check",
+ "utm_content": "m08-s2-p3",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M08-S2.md"
+ },
+ {
+ "id": "M08-S3-P1",
+ "support_id": "M08-S3",
+ "main_id": "M08",
+ "status": "PROPOSED",
+ "format": "Practical walkthrough",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn"
+ ],
+ "hook": "A chunk marker is a hint, not a retrieval system",
+ "beats": [
+ "Open with the specific review problem: What does a chunk-boundary marker communicate and what does it not do?",
+ "Give an actionable sequence: Locate markers in real output; Explain heading alignment; Separate markers from downstream splitting",
+ "State the limit: No embedding/retrieval service or semantic chunking guarantee; heed existing E08 code audit."
+ ],
+ "visual": "Decision/checklist tied to Locate markers in real output",
+ "source_refs": [
+ "SRC-LOCAL",
+ "SRC-MARKDOWN"
+ ],
+ "evidence_required": "Fixture with H1/H2/H3 and fenced text; inspect marker placement without publishing a fragile splitter.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/llmiser-rag-ready-markers",
+ "utm_content": "m08-s3-p1",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M08-S3.md"
+ },
+ {
+ "id": "M08-S3-P2",
+ "support_id": "M08-S3",
+ "main_id": "M08",
+ "status": "PROPOSED",
+ "format": "Annotated example",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn carousel",
+ "Instagram carousel"
+ ],
+ "hook": "Annotate one heading and its marker",
+ "beats": [
+ "Introduce the original fixture: Fixture with H1/H2/H3 and fenced text; inspect marker placement without publishing a fragile splitter.",
+ "Show the relevant source and actual output side by side; label expected output separately until tested",
+ "Point out one discrepancy or confirmed match and the next review step"
+ ],
+ "visual": "Annotated source/output fixture comparison",
+ "source_refs": [
+ "SRC-LOCAL",
+ "SRC-MARKDOWN"
+ ],
+ "evidence_required": "Fixture with H1/H2/H3 and fenced text; inspect marker placement without publishing a fragile splitter.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/llmiser-rag-ready-markers",
+ "utm_content": "m08-s3-p2",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M08-S3.md"
+ },
+ {
+ "id": "M08-S3-P3",
+ "support_id": "M08-S3",
+ "main_id": "M08",
+ "status": "PROPOSED",
+ "format": "Misconception and limitation",
+ "channel": null,
+ "suggested_channels": [
+ "X",
+ "Threads"
+ ],
+ "hook": "Your downstream splitter still needs testing",
+ "beats": [
+ "Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result",
+ "Explain the boundary: No embedding/retrieval service or semantic chunking guarantee; heed existing E08 code audit.",
+ "Offer a concrete check: Separate markers from downstream splitting"
+ ],
+ "visual": "Two-panel assumption versus verification boundary",
+ "source_refs": [
+ "SRC-LOCAL",
+ "SRC-MARKDOWN"
+ ],
+ "evidence_required": "Fixture with H1/H2/H3 and fenced text; inspect marker placement without publishing a fragile splitter.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/llmiser-rag-ready-markers",
+ "utm_content": "m08-s3-p3",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M08-S3.md"
+ },
+ {
+ "id": "M09-S1-P1",
+ "support_id": "M09-S1",
+ "main_id": "M09",
+ "status": "PROPOSED",
+ "format": "Practical walkthrough",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn"
+ ],
+ "hook": "Which version reached your download?",
+ "beats": [
+ "Open with the specific review problem: How can I tell whether an export includes my edits?",
+ "Give an actionable sequence: Identify source result and editor state; Make a harmless visible edit; Compare saved outputs",
+ "State the limit: Verify each action in current UI; do not assume edits persist across refresh or recovery."
+ ],
+ "visual": "Decision/checklist tied to Identify source result and editor state",
+ "source_refs": [
+ "SRC-LOCAL",
+ "SRC-MARKDOWN"
+ ],
+ "evidence_required": "Tiny fixture with a unique marker inserted in editor; compare copy/download/recovery behavior.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/original-edited-markdown",
+ "utm_content": "m09-s1-p1",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M09-S1.md"
+ },
+ {
+ "id": "M09-S1-P2",
+ "support_id": "M09-S1",
+ "main_id": "M09",
+ "status": "PROPOSED",
+ "format": "Annotated example",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn carousel",
+ "Instagram carousel"
+ ],
+ "hook": "Trace one visible edit through export",
+ "beats": [
+ "Introduce the original fixture: Tiny fixture with a unique marker inserted in editor; compare copy/download/recovery behavior.",
+ "Show the relevant source and actual output side by side; label expected output separately until tested",
+ "Point out one discrepancy or confirmed match and the next review step"
+ ],
+ "visual": "Annotated source/output fixture comparison",
+ "source_refs": [
+ "SRC-LOCAL",
+ "SRC-MARKDOWN"
+ ],
+ "evidence_required": "Tiny fixture with a unique marker inserted in editor; compare copy/download/recovery behavior.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/original-edited-markdown",
+ "utm_content": "m09-s1-p2",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M09-S1.md"
+ },
+ {
+ "id": "M09-S1-P3",
+ "support_id": "M09-S1",
+ "main_id": "M09",
+ "status": "PROPOSED",
+ "format": "Misconception and limitation",
+ "channel": null,
+ "suggested_channels": [
+ "X",
+ "Threads"
+ ],
+ "hook": "Recovered output may not be your edited draft",
+ "beats": [
+ "Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result",
+ "Explain the boundary: Verify each action in current UI; do not assume edits persist across refresh or recovery.",
+ "Offer a concrete check: Compare saved outputs"
+ ],
+ "visual": "Two-panel assumption versus verification boundary",
+ "source_refs": [
+ "SRC-LOCAL",
+ "SRC-MARKDOWN"
+ ],
+ "evidence_required": "Tiny fixture with a unique marker inserted in editor; compare copy/download/recovery behavior.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/original-edited-markdown",
+ "utm_content": "m09-s1-p3",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M09-S1.md"
+ },
+ {
+ "id": "M09-S2-P1",
+ "support_id": "M09-S2",
+ "main_id": "M09",
+ "status": "PROPOSED",
+ "format": "Practical walkthrough",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn"
+ ],
+ "hook": "A preview is not the whole verification",
+ "beats": [
+ "Open with the specific review problem: How do I distinguish a limited rendering view from incomplete output?",
+ "Give an actionable sequence: Identify the preview mode; Locate start middle and end; Compare raw export coverage",
+ "State the limit: No current size threshold claim without code/UI verification; missing content must be reported."
+ ],
+ "visual": "Decision/checklist tied to Identify the preview mode",
+ "source_refs": [
+ "SRC-LOCAL",
+ "SRC-MARKDOWN"
+ ],
+ "evidence_required": "Synthetic long text with markers at start, middle and end; inspect current preview/export behavior.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/long-markdown-preview",
+ "utm_content": "m09-s2-p1",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M09-S2.md"
+ },
+ {
+ "id": "M09-S2-P2",
+ "support_id": "M09-S2",
+ "main_id": "M09",
+ "status": "PROPOSED",
+ "format": "Annotated example",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn carousel",
+ "Instagram carousel"
+ ],
+ "hook": "Check three landmarks in a long export",
+ "beats": [
+ "Introduce the original fixture: Synthetic long text with markers at start, middle and end; inspect current preview/export behavior.",
+ "Show the relevant source and actual output side by side; label expected output separately until tested",
+ "Point out one discrepancy or confirmed match and the next review step"
+ ],
+ "visual": "Annotated source/output fixture comparison",
+ "source_refs": [
+ "SRC-LOCAL",
+ "SRC-MARKDOWN"
+ ],
+ "evidence_required": "Synthetic long text with markers at start, middle and end; inspect current preview/export behavior.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/long-markdown-preview",
+ "utm_content": "m09-s2-p2",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M09-S2.md"
+ },
+ {
+ "id": "M09-S2-P3",
+ "support_id": "M09-S2",
+ "main_id": "M09",
+ "status": "PROPOSED",
+ "format": "Misconception and limitation",
+ "channel": null,
+ "suggested_channels": [
+ "X",
+ "Threads"
+ ],
+ "hook": "Rendering limits and data loss are different problems",
+ "beats": [
+ "Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result",
+ "Explain the boundary: No current size threshold claim without code/UI verification; missing content must be reported.",
+ "Offer a concrete check: Compare raw export coverage"
+ ],
+ "visual": "Two-panel assumption versus verification boundary",
+ "source_refs": [
+ "SRC-LOCAL",
+ "SRC-MARKDOWN"
+ ],
+ "evidence_required": "Synthetic long text with markers at start, middle and end; inspect current preview/export behavior.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/long-markdown-preview",
+ "utm_content": "m09-s2-p3",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M09-S2.md"
+ },
+ {
+ "id": "M09-S3-P1",
+ "support_id": "M09-S3",
+ "main_id": "M09",
+ "status": "PROPOSED",
+ "format": "Practical walkthrough",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn"
+ ],
+ "hook": "Check the destination, not just the copy button",
+ "beats": [
+ "Open with the specific review problem: What should I check after moving Markdown to another app?",
+ "Give an actionable sequence: Choose clipboard or file transfer; Check characters and code fences; Compare the destination with saved text",
+ "State the limit: Destination apps may reformat; no promise of every platform preserving Markdown."
+ ],
+ "visual": "Decision/checklist tied to Choose clipboard or file transfer",
+ "source_refs": [
+ "SRC-LOCAL",
+ "SRC-MARKDOWN"
+ ],
+ "evidence_required": "Small Unicode, pipe-table and fenced-code fixture copied to a plain text editor and downloaded.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/copy-download-markdown",
+ "utm_content": "m09-s3-p1",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M09-S3.md"
+ },
+ {
+ "id": "M09-S3-P2",
+ "support_id": "M09-S3",
+ "main_id": "M09",
+ "status": "PROPOSED",
+ "format": "Annotated example",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn carousel",
+ "Instagram carousel"
+ ],
+ "hook": "Compare clipboard text with a downloaded file",
+ "beats": [
+ "Introduce the original fixture: Small Unicode, pipe-table and fenced-code fixture copied to a plain text editor and downloaded.",
+ "Show the relevant source and actual output side by side; label expected output separately until tested",
+ "Point out one discrepancy or confirmed match and the next review step"
+ ],
+ "visual": "Annotated source/output fixture comparison",
+ "source_refs": [
+ "SRC-LOCAL",
+ "SRC-MARKDOWN"
+ ],
+ "evidence_required": "Small Unicode, pipe-table and fenced-code fixture copied to a plain text editor and downloaded.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/copy-download-markdown",
+ "utm_content": "m09-s3-p2",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M09-S3.md"
+ },
+ {
+ "id": "M09-S3-P3",
+ "support_id": "M09-S3",
+ "main_id": "M09",
+ "status": "PROPOSED",
+ "format": "Misconception and limitation",
+ "channel": null,
+ "suggested_channels": [
+ "X",
+ "Threads"
+ ],
+ "hook": "Formatting changes can happen after export",
+ "beats": [
+ "Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result",
+ "Explain the boundary: Destination apps may reformat; no promise of every platform preserving Markdown.",
+ "Offer a concrete check: Compare the destination with saved text"
+ ],
+ "visual": "Two-panel assumption versus verification boundary",
+ "source_refs": [
+ "SRC-LOCAL",
+ "SRC-MARKDOWN"
+ ],
+ "evidence_required": "Small Unicode, pipe-table and fenced-code fixture copied to a plain text editor and downloaded.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/copy-download-markdown",
+ "utm_content": "m09-s3-p3",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M09-S3.md"
+ },
+ {
+ "id": "M10-S1-P1",
+ "support_id": "M10-S1",
+ "main_id": "M10",
+ "status": "PROPOSED",
+ "format": "Practical walkthrough",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn"
+ ],
+ "hook": "Two config files can have different jobs",
+ "beats": [
+ "Open with the specific review problem: How do source paths help locate the right converted file?",
+ "Give an actionable sequence: Read the actual index layout; Distinguish repeated basenames; Find the corresponding content",
+ "State the limit: Use actual current index format; no invented links or schema fields."
+ ],
+ "visual": "Decision/checklist tied to Read the actual index layout",
+ "source_refs": [
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "ZIP with src/config.txt and docs/config.txt containing different text; inspect index and combined output.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/read-project-index-paths",
+ "utm_content": "m10-s1-p1",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M10-S1.md"
+ },
+ {
+ "id": "M10-S1-P2",
+ "support_id": "M10-S1",
+ "main_id": "M10",
+ "status": "PROPOSED",
+ "format": "Annotated example",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn carousel",
+ "Instagram carousel"
+ ],
+ "hook": "Follow a full path from index to content",
+ "beats": [
+ "Introduce the original fixture: ZIP with src/config.txt and docs/config.txt containing different text; inspect index and combined output.",
+ "Show the relevant source and actual output side by side; label expected output separately until tested",
+ "Point out one discrepancy or confirmed match and the next review step"
+ ],
+ "visual": "Annotated source/output fixture comparison",
+ "source_refs": [
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "ZIP with src/config.txt and docs/config.txt containing different text; inspect index and combined output.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/read-project-index-paths",
+ "utm_content": "m10-s1-p2",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M10-S1.md"
+ },
+ {
+ "id": "M10-S1-P3",
+ "support_id": "M10-S1",
+ "main_id": "M10",
+ "status": "PROPOSED",
+ "format": "Misconception and limitation",
+ "channel": null,
+ "suggested_channels": [
+ "X",
+ "Threads"
+ ],
+ "hook": "A basename alone may be ambiguous",
+ "beats": [
+ "Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result",
+ "Explain the boundary: Use actual current index format; no invented links or schema fields.",
+ "Offer a concrete check: Find the corresponding content"
+ ],
+ "visual": "Two-panel assumption versus verification boundary",
+ "source_refs": [
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "ZIP with src/config.txt and docs/config.txt containing different text; inspect index and combined output.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/read-project-index-paths",
+ "utm_content": "m10-s1-p3",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M10-S1.md"
+ },
+ {
+ "id": "M10-S2-P1",
+ "support_id": "M10-S2",
+ "main_id": "M10",
+ "status": "PROPOSED",
+ "format": "Practical walkthrough",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn"
+ ],
+ "hook": "Success does not mean every file was included",
+ "beats": [
+ "Open with the specific review problem: How do I account for every intended source item after conversion?",
+ "Give an actionable sequence: Create an expected inventory; Read actual outcome fields; Reconcile counts and unresolved items",
+ "State the limit: Never infer that every source was converted from a successful overall status."
+ ],
+ "visual": "Decision/checklist tied to Create an expected inventory",
+ "source_refs": [
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Tiny ZIP inventory with valid supported entries and a deliberately unsupported harmless item; save actual manifest.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/reconcile-zip-manifest",
+ "utm_content": "m10-s2-p1",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M10-S2.md"
+ },
+ {
+ "id": "M10-S2-P2",
+ "support_id": "M10-S2",
+ "main_id": "M10",
+ "status": "PROPOSED",
+ "format": "Annotated example",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn carousel",
+ "Instagram carousel"
+ ],
+ "hook": "Compare expected entries with reported outcomes",
+ "beats": [
+ "Introduce the original fixture: Tiny ZIP inventory with valid supported entries and a deliberately unsupported harmless item; save actual manifest.",
+ "Show the relevant source and actual output side by side; label expected output separately until tested",
+ "Point out one discrepancy or confirmed match and the next review step"
+ ],
+ "visual": "Annotated source/output fixture comparison",
+ "source_refs": [
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Tiny ZIP inventory with valid supported entries and a deliberately unsupported harmless item; save actual manifest.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/reconcile-zip-manifest",
+ "utm_content": "m10-s2-p2",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M10-S2.md"
+ },
+ {
+ "id": "M10-S2-P3",
+ "support_id": "M10-S2",
+ "main_id": "M10",
+ "status": "PROPOSED",
+ "format": "Misconception and limitation",
+ "channel": null,
+ "suggested_channels": [
+ "X",
+ "Threads"
+ ],
+ "hook": "Count converted, skipped and unresolved separately",
+ "beats": [
+ "Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result",
+ "Explain the boundary: Never infer that every source was converted from a successful overall status.",
+ "Offer a concrete check: Reconcile counts and unresolved items"
+ ],
+ "visual": "Two-panel assumption versus verification boundary",
+ "source_refs": [
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Tiny ZIP inventory with valid supported entries and a deliberately unsupported harmless item; save actual manifest.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/reconcile-zip-manifest",
+ "utm_content": "m10-s2-p3",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M10-S2.md"
+ },
+ {
+ "id": "M10-S3-P1",
+ "support_id": "M10-S3",
+ "main_id": "M10",
+ "status": "PROPOSED",
+ "format": "Practical walkthrough",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn"
+ ],
+ "hook": "Where did that archive entry go?",
+ "beats": [
+ "Open with the specific review problem: How do I distinguish an intentional exclusion from a conversion omission?",
+ "Give an actionable sequence: Locate the expected entry; Inspect reported restrictions or outcomes; Retry a permitted small source separately",
+ "State the limit: Do not claim all nested ZIPs are expanded or recommend bypassing limits; separate from pre-upload exclusions in M01."
+ ],
+ "visual": "Decision/checklist tied to Locate the expected entry",
+ "source_refs": [
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Controlled nested-archive or unsupported-entry fixture with documented limits; inspect actual result.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/missing-zip-conversion-content",
+ "utm_content": "m10-s3-p1",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M10-S3.md"
+ },
+ {
+ "id": "M10-S3-P2",
+ "support_id": "M10-S3",
+ "main_id": "M10",
+ "status": "PROPOSED",
+ "format": "Annotated example",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn carousel",
+ "Instagram carousel"
+ ],
+ "hook": "Trace a missing item through the result artifacts",
+ "beats": [
+ "Introduce the original fixture: Controlled nested-archive or unsupported-entry fixture with documented limits; inspect actual result.",
+ "Show the relevant source and actual output side by side; label expected output separately until tested",
+ "Point out one discrepancy or confirmed match and the next review step"
+ ],
+ "visual": "Annotated source/output fixture comparison",
+ "source_refs": [
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Controlled nested-archive or unsupported-entry fixture with documented limits; inspect actual result.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/missing-zip-conversion-content",
+ "utm_content": "m10-s3-p2",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M10-S3.md"
+ },
+ {
+ "id": "M10-S3-P3",
+ "support_id": "M10-S3",
+ "main_id": "M10",
+ "status": "PROPOSED",
+ "format": "Misconception and limitation",
+ "channel": null,
+ "suggested_channels": [
+ "X",
+ "Threads"
+ ],
+ "hook": "Omitted content needs an explanation",
+ "beats": [
+ "Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result",
+ "Explain the boundary: Do not claim all nested ZIPs are expanded or recommend bypassing limits; separate from pre-upload exclusions in M01.",
+ "Offer a concrete check: Retry a permitted small source separately"
+ ],
+ "visual": "Two-panel assumption versus verification boundary",
+ "source_refs": [
+ "SRC-LOCAL"
+ ],
+ "evidence_required": "Controlled nested-archive or unsupported-entry fixture with documented limits; inspect actual result.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/missing-zip-conversion-content",
+ "utm_content": "m10-s3-p3",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M10-S3.md"
+ },
+ {
+ "id": "M11-S1-P1",
+ "support_id": "M11-S1",
+ "main_id": "M11",
+ "status": "PROPOSED",
+ "format": "Practical walkthrough",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn"
+ ],
+ "hook": "Who actually asked the AI to do that?",
+ "beats": [
+ "Open with the specific review problem: How do I recognize source text attempting to redirect the task?",
+ "Give an actionable sequence: Separate user task from source claims; Identify role-like imperatives; Treat suspicious passages as quoted evidence",
+ "State the limit: Recognition is not proof of detection completeness; cite OWASP and do not execute embedded commands."
+ ],
+ "visual": "Decision/checklist tied to Separate user task from source claims",
+ "source_refs": [
+ "SRC-OWASP",
+ "SRC-INJECTION"
+ ],
+ "evidence_required": "Inert local excerpt asking for an unrelated summary style, clearly labeled illustrative; no secret extraction or live attack.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/untrusted-document-instructions",
+ "utm_content": "m11-s1-p1",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M11-S1.md"
+ },
+ {
+ "id": "M11-S1-P2",
+ "support_id": "M11-S1",
+ "main_id": "M11",
+ "status": "PROPOSED",
+ "format": "Annotated example",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn carousel",
+ "Instagram carousel"
+ ],
+ "hook": "Label task instruction versus document quotation",
+ "beats": [
+ "Introduce the original fixture: Inert local excerpt asking for an unrelated summary style, clearly labeled illustrative; no secret extraction or live attack.",
+ "Show the relevant source and actual output side by side; label expected output separately until tested",
+ "Point out one discrepancy or confirmed match and the next review step"
+ ],
+ "visual": "Annotated source/output fixture comparison",
+ "source_refs": [
+ "SRC-OWASP",
+ "SRC-INJECTION"
+ ],
+ "evidence_required": "Inert local excerpt asking for an unrelated summary style, clearly labeled illustrative; no secret extraction or live attack.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/untrusted-document-instructions",
+ "utm_content": "m11-s1-p2",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M11-S1.md"
+ },
+ {
+ "id": "M11-S1-P3",
+ "support_id": "M11-S1",
+ "main_id": "M11",
+ "status": "PROPOSED",
+ "format": "Misconception and limitation",
+ "channel": null,
+ "suggested_channels": [
+ "X",
+ "Threads"
+ ],
+ "hook": "Official-looking wording does not grant authority",
+ "beats": [
+ "Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result",
+ "Explain the boundary: Recognition is not proof of detection completeness; cite OWASP and do not execute embedded commands.",
+ "Offer a concrete check: Treat suspicious passages as quoted evidence"
+ ],
+ "visual": "Two-panel assumption versus verification boundary",
+ "source_refs": [
+ "SRC-OWASP",
+ "SRC-INJECTION"
+ ],
+ "evidence_required": "Inert local excerpt asking for an unrelated summary style, clearly labeled illustrative; no secret extraction or live attack.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/untrusted-document-instructions",
+ "utm_content": "m11-s1-p3",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M11-S1.md"
+ },
+ {
+ "id": "M11-S2-P1",
+ "support_id": "M11-S2",
+ "main_id": "M11",
+ "status": "PROPOSED",
+ "format": "Practical walkthrough",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn"
+ ],
+ "hook": "A new format does not make text trusted",
+ "beats": [
+ "Open with the specific review problem: Why can an instruction attempt survive a change of file format?",
+ "Give an actionable sequence: Trace source text into Markdown; Separate formatting from trust; Describe downstream review and permissions",
+ "State the limit: No claim conversion is a sanitizer or that keyword removal is a complete defense."
+ ],
+ "visual": "Decision/checklist tied to Trace source text into Markdown",
+ "source_refs": [
+ "SRC-OWASP",
+ "SRC-INJECTION"
+ ],
+ "evidence_required": "Harmless imperative preserved through an original text/document conversion; inspect strings only.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/markdown-conversion-prompt-injection",
+ "utm_content": "m11-s2-p1",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M11-S2.md"
+ },
+ {
+ "id": "M11-S2-P2",
+ "support_id": "M11-S2",
+ "main_id": "M11",
+ "status": "PROPOSED",
+ "format": "Annotated example",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn carousel",
+ "Instagram carousel"
+ ],
+ "hook": "Follow one harmless instruction-shaped sentence",
+ "beats": [
+ "Introduce the original fixture: Harmless imperative preserved through an original text/document conversion; inspect strings only.",
+ "Show the relevant source and actual output side by side; label expected output separately until tested",
+ "Point out one discrepancy or confirmed match and the next review step"
+ ],
+ "visual": "Annotated source/output fixture comparison",
+ "source_refs": [
+ "SRC-OWASP",
+ "SRC-INJECTION"
+ ],
+ "evidence_required": "Harmless imperative preserved through an original text/document conversion; inspect strings only.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/markdown-conversion-prompt-injection",
+ "utm_content": "m11-s2-p2",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M11-S2.md"
+ },
+ {
+ "id": "M11-S2-P3",
+ "support_id": "M11-S2",
+ "main_id": "M11",
+ "status": "PROPOSED",
+ "format": "Misconception and limitation",
+ "channel": null,
+ "suggested_channels": [
+ "X",
+ "Threads"
+ ],
+ "hook": "Removing formatting is not removing intent",
+ "beats": [
+ "Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result",
+ "Explain the boundary: No claim conversion is a sanitizer or that keyword removal is a complete defense.",
+ "Offer a concrete check: Describe downstream review and permissions"
+ ],
+ "visual": "Two-panel assumption versus verification boundary",
+ "source_refs": [
+ "SRC-OWASP",
+ "SRC-INJECTION"
+ ],
+ "evidence_required": "Harmless imperative preserved through an original text/document conversion; inspect strings only.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/markdown-conversion-prompt-injection",
+ "utm_content": "m11-s2-p3",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M11-S2.md"
+ },
+ {
+ "id": "M11-S3-P1",
+ "support_id": "M11-S3",
+ "main_id": "M11",
+ "status": "PROPOSED",
+ "format": "Practical walkthrough",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn"
+ ],
+ "hook": "Reading a document should not grant it permissions",
+ "beats": [
+ "Open with the specific review problem: What should a reader check before allowing actions derived from a document?",
+ "Give an actionable sequence: Identify the requested action; Trace it to user authorization; Review tool permissions and proposed effects",
+ "State the limit: Stay defensive; LLMiser does not enforce downstream tool permissions."
+ ],
+ "visual": "Decision/checklist tied to Identify the requested action",
+ "source_refs": [
+ "SRC-OWASP",
+ "SRC-INJECTION"
+ ],
+ "evidence_required": "Paper exercise comparing summarize-only task with a source requesting an external action; no messages sent.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/ai-actions-external-documents",
+ "utm_content": "m11-s3-p1",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M11-S3.md"
+ },
+ {
+ "id": "M11-S3-P2",
+ "support_id": "M11-S3",
+ "main_id": "M11",
+ "status": "PROPOSED",
+ "format": "Annotated example",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn carousel",
+ "Instagram carousel"
+ ],
+ "hook": "Draw the boundary between reading and acting",
+ "beats": [
+ "Introduce the original fixture: Paper exercise comparing summarize-only task with a source requesting an external action; no messages sent.",
+ "Show the relevant source and actual output side by side; label expected output separately until tested",
+ "Point out one discrepancy or confirmed match and the next review step"
+ ],
+ "visual": "Annotated source/output fixture comparison",
+ "source_refs": [
+ "SRC-OWASP",
+ "SRC-INJECTION"
+ ],
+ "evidence_required": "Paper exercise comparing summarize-only task with a source requesting an external action; no messages sent.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/ai-actions-external-documents",
+ "utm_content": "m11-s3-p2",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M11-S3.md"
+ },
+ {
+ "id": "M11-S3-P3",
+ "support_id": "M11-S3",
+ "main_id": "M11",
+ "status": "PROPOSED",
+ "format": "Misconception and limitation",
+ "channel": null,
+ "suggested_channels": [
+ "X",
+ "Threads"
+ ],
+ "hook": "A citation is not approval to perform an action",
+ "beats": [
+ "Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result",
+ "Explain the boundary: Stay defensive; LLMiser does not enforce downstream tool permissions.",
+ "Offer a concrete check: Review tool permissions and proposed effects"
+ ],
+ "visual": "Two-panel assumption versus verification boundary",
+ "source_refs": [
+ "SRC-OWASP",
+ "SRC-INJECTION"
+ ],
+ "evidence_required": "Paper exercise comparing summarize-only task with a source requesting an external action; no messages sent.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/ai-actions-external-documents",
+ "utm_content": "m11-s3-p3",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M11-S3.md"
+ },
+ {
+ "id": "M12-S1-P1",
+ "support_id": "M12-S1",
+ "main_id": "M12",
+ "status": "PROPOSED",
+ "format": "Practical walkthrough",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn"
+ ],
+ "hook": "Downloaded today does not mean effective today",
+ "beats": [
+ "Open with the specific review problem: Which provenance fields distinguish two versions of a source?",
+ "Give an actionable sequence: Record source identity and revision; Separate effective date from download date; Include a compact provenance note",
+ "State the limit: No fabricated author/date; keep unknown fields explicit and no built-in version-management claim."
+ ],
+ "visual": "Decision/checklist tied to Record source identity and revision",
+ "source_refs": [
+ "SRC-RETRIEVAL"
+ ],
+ "evidence_required": "Two synthetic policy revisions with filename, version and effective date, plus a stable source ID.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/label-document-versions-ai",
+ "utm_content": "m12-s1-p1",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M12-S1.md"
+ },
+ {
+ "id": "M12-S1-P2",
+ "support_id": "M12-S1",
+ "main_id": "M12",
+ "status": "PROPOSED",
+ "format": "Annotated example",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn carousel",
+ "Instagram carousel"
+ ],
+ "hook": "Compare revision date with effective date",
+ "beats": [
+ "Introduce the original fixture: Two synthetic policy revisions with filename, version and effective date, plus a stable source ID.",
+ "Show the relevant source and actual output side by side; label expected output separately until tested",
+ "Point out one discrepancy or confirmed match and the next review step"
+ ],
+ "visual": "Annotated source/output fixture comparison",
+ "source_refs": [
+ "SRC-RETRIEVAL"
+ ],
+ "evidence_required": "Two synthetic policy revisions with filename, version and effective date, plus a stable source ID.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/label-document-versions-ai",
+ "utm_content": "m12-s1-p2",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M12-S1.md"
+ },
+ {
+ "id": "M12-S1-P3",
+ "support_id": "M12-S1",
+ "main_id": "M12",
+ "status": "PROPOSED",
+ "format": "Misconception and limitation",
+ "channel": null,
+ "suggested_channels": [
+ "X",
+ "Threads"
+ ],
+ "hook": "A filename is only one piece of provenance",
+ "beats": [
+ "Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result",
+ "Explain the boundary: No fabricated author/date; keep unknown fields explicit and no built-in version-management claim.",
+ "Offer a concrete check: Include a compact provenance note"
+ ],
+ "visual": "Two-panel assumption versus verification boundary",
+ "source_refs": [
+ "SRC-RETRIEVAL"
+ ],
+ "evidence_required": "Two synthetic policy revisions with filename, version and effective date, plus a stable source ID.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/label-document-versions-ai",
+ "utm_content": "m12-s1-p3",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M12-S1.md"
+ },
+ {
+ "id": "M12-S2-P1",
+ "support_id": "M12-S2",
+ "main_id": "M12",
+ "status": "PROPOSED",
+ "format": "Practical walkthrough",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn"
+ ],
+ "hook": "Both passages can be valid in different contexts",
+ "beats": [
+ "Open with the specific review problem: How do I handle two valid-looking passages with different scopes?",
+ "Give an actionable sequence: Compare audience date and applicability; Identify authorized precedence or uncertainty; Ask for clarification when needed",
+ "State the limit: Do not assume newer always wins or silently choose a policy; generic information, not legal advice."
+ ],
+ "visual": "Decision/checklist tied to Compare audience date and applicability",
+ "source_refs": [
+ "SRC-RETRIEVAL"
+ ],
+ "evidence_required": "Two fictional company policies for different teams with different limits; no real legal interpretation.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/conflicting-policy-passages-ai",
+ "utm_content": "m12-s2-p1",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M12-S2.md"
+ },
+ {
+ "id": "M12-S2-P2",
+ "support_id": "M12-S2",
+ "main_id": "M12",
+ "status": "PROPOSED",
+ "format": "Annotated example",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn carousel",
+ "Instagram carousel"
+ ],
+ "hook": "Build a scope-and-date comparison card",
+ "beats": [
+ "Introduce the original fixture: Two fictional company policies for different teams with different limits; no real legal interpretation.",
+ "Show the relevant source and actual output side by side; label expected output separately until tested",
+ "Point out one discrepancy or confirmed match and the next review step"
+ ],
+ "visual": "Annotated source/output fixture comparison",
+ "source_refs": [
+ "SRC-RETRIEVAL"
+ ],
+ "evidence_required": "Two fictional company policies for different teams with different limits; no real legal interpretation.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/conflicting-policy-passages-ai",
+ "utm_content": "m12-s2-p2",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M12-S2.md"
+ },
+ {
+ "id": "M12-S2-P3",
+ "support_id": "M12-S2",
+ "main_id": "M12",
+ "status": "PROPOSED",
+ "format": "Misconception and limitation",
+ "channel": null,
+ "suggested_channels": [
+ "X",
+ "Threads"
+ ],
+ "hook": "The latest document is not always the applicable one",
+ "beats": [
+ "Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result",
+ "Explain the boundary: Do not assume newer always wins or silently choose a policy; generic information, not legal advice.",
+ "Offer a concrete check: Ask for clarification when needed"
+ ],
+ "visual": "Two-panel assumption versus verification boundary",
+ "source_refs": [
+ "SRC-RETRIEVAL"
+ ],
+ "evidence_required": "Two fictional company policies for different teams with different limits; no real legal interpretation.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/conflicting-policy-passages-ai",
+ "utm_content": "m12-s2-p3",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M12-S2.md"
+ },
+ {
+ "id": "M12-S3-P1",
+ "support_id": "M12-S3",
+ "main_id": "M12",
+ "status": "PROPOSED",
+ "format": "Practical walkthrough",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn"
+ ],
+ "hook": "Updating the source may leave old excerpts behind",
+ "beats": [
+ "Open with the specific review problem: How do I update a manually assembled packet when a source changes?",
+ "Give an actionable sequence: Identify excerpts tied to the superseded source; Replace and preserve provenance; Test a question affected by the change",
+ "State the limit: No automatic cache/index invalidation feature claimed; distinguish a manual packet from a production RAG index."
+ ],
+ "visual": "Decision/checklist tied to Identify excerpts tied to the superseded source",
+ "source_refs": [
+ "SRC-RETRIEVAL"
+ ],
+ "evidence_required": "Local packet containing old and new fictional deadlines; trace each excerpt to source revision.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/stale-excerpts-ai-context",
+ "utm_content": "m12-s3-p1",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M12-S3.md"
+ },
+ {
+ "id": "M12-S3-P2",
+ "support_id": "M12-S3",
+ "main_id": "M12",
+ "status": "PROPOSED",
+ "format": "Annotated example",
+ "channel": null,
+ "suggested_channels": [
+ "LinkedIn carousel",
+ "Instagram carousel"
+ ],
+ "hook": "Trace one revised fact through the packet",
+ "beats": [
+ "Introduce the original fixture: Local packet containing old and new fictional deadlines; trace each excerpt to source revision.",
+ "Show the relevant source and actual output side by side; label expected output separately until tested",
+ "Point out one discrepancy or confirmed match and the next review step"
+ ],
+ "visual": "Annotated source/output fixture comparison",
+ "source_refs": [
+ "SRC-RETRIEVAL"
+ ],
+ "evidence_required": "Local packet containing old and new fictional deadlines; trace each excerpt to source revision.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/stale-excerpts-ai-context",
+ "utm_content": "m12-s3-p2",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M12-S3.md"
+ },
+ {
+ "id": "M12-S3-P3",
+ "support_id": "M12-S3",
+ "main_id": "M12",
+ "status": "PROPOSED",
+ "format": "Misconception and limitation",
+ "channel": null,
+ "suggested_channels": [
+ "X",
+ "Threads"
+ ],
+ "hook": "Do not keep both versions without explaining why",
+ "beats": [
+ "Challenge the assumption named in the hook without presenting a hypothetical failure as an observed result",
+ "Explain the boundary: No automatic cache/index invalidation feature claimed; distinguish a manual packet from a production RAG index.",
+ "Offer a concrete check: Test a question affected by the change"
+ ],
+ "visual": "Two-panel assumption versus verification boundary",
+ "source_refs": [
+ "SRC-RETRIEVAL"
+ ],
+ "evidence_required": "Local packet containing old and new fictional deadlines; trace each excerpt to source revision.",
+ "canonical_destination": "https://llmiser.devbehindyou.com/blog/stale-excerpts-ai-context",
+ "utm_content": "m12-s3-p3",
+ "publication_status": "NOT_PUBLISHED",
+ "brief": "campaign/post-briefs/M12-S3.md"
+ }
+ ]
+}
diff --git a/blog-pipeline/campaign/selected-titles.json b/blog-pipeline/campaign/selected-titles.json
new file mode 100644
index 0000000..2d28ff7
--- /dev/null
+++ b/blog-pipeline/campaign/selected-titles.json
@@ -0,0 +1,18 @@
+{
+ "selected_at": "2026-11-05",
+ "source": "Explicit user title selections",
+ "titles": {
+ "M01": "7 Things to Remove Before Sharing a Codebase With AI",
+ "M02": "9 OCR Checks Before You Send Scanned Text to AI",
+ "M03": "7 Excel Details to Check Before Sharing Data With AI",
+ "M04": "6 Ways to Prepare Word Documents for AI",
+ "M05": "8 Checks When Converting PowerPoint to Markdown",
+ "M06": "7 Ways to Prepare Cleaner CSV Data for AI",
+ "M07": "How to Convert Multiple Files With LLMiser",
+ "M08": "LLMiser Profiles: Standard, Clean, Compact, RAG-ready",
+ "M09": "How to Edit and Export Markdown With LLMiser",
+ "M10": "How to Read LLMiser's ZIP Index and Manifest",
+ "M11": "Prompt Injection: Can a Document Hijack Your AI?",
+ "M12": "Why Two Versions of a Document Can Confuse AI"
+ }
+}
diff --git a/blog-pipeline/campaign/sources.json b/blog-pipeline/campaign/sources.json
new file mode 100644
index 0000000..c6c6b14
--- /dev/null
+++ b/blog-pipeline/campaign/sources.json
@@ -0,0 +1,102 @@
+{
+ "updated": "2026-11-05",
+ "note": "Starting sources, not blanket verification of article claims. Recheck at drafting time. Local code inspection and external documentation do not replace the proposed original fixtures.",
+ "sources": [
+ {
+ "id": "SRC-LOCAL",
+ "type": "repository",
+ "paths": [
+ "frontend/lib/formats.js",
+ "frontend/lib/siteContent.js",
+ "frontend/lib/documentStats.js",
+ "frontend/lib/models/editorExport.js",
+ "backendN/app/common/profiles.py",
+ "docs/ai-handover/HANDOVER.md"
+ ],
+ "status": "SOURCE_INSPECTED_OR_EXISTING_DATED_EVIDENCE",
+ "note": "Verify the relevant UI/control and conversion behavior before each demonstration. No new live conversion performed for this pack."
+ },
+ {
+ "id": "SRC-GIT",
+ "type": "official_documentation",
+ "url": "https://docs.github.com/en/get-started/git-basics/ignoring-files",
+ "retrieved": "2026-11-05",
+ "status": "READ",
+ "note": "Ignore rules are not a secret scrubber or a guarantee about ZIP contents. Inspect the actual sharing copy."
+ },
+ {
+ "id": "SRC-EXCEL",
+ "type": "official_documentation",
+ "url": "https://support.microsoft.com/en-us/excel/keeping-leading-zeros-and-large-numbers",
+ "retrieved": "2026-11-05",
+ "status": "READ",
+ "note": "Supports researching stored values and displayed formatting. Formula/cache and merged-header claims still need specific sources and fixtures."
+ },
+ {
+ "id": "SRC-HEADINGS",
+ "type": "official_documentation",
+ "url": "https://www.w3.org/WAI/tutorials/page-structure/headings/",
+ "retrieved": "2026-11-05",
+ "status": "READ",
+ "note": "General semantic heading guidance, not evidence of DOCX parser behavior; obtain Word-specific revision/list documentation when drafting."
+ },
+ {
+ "id": "SRC-CSV",
+ "type": "informational_RFC",
+ "url": "https://www.rfc-editor.org/rfc/rfc4180",
+ "retrieved": "2026-11-05",
+ "status": "READ",
+ "note": "CSV format reference, informational rather than universal dialect support. Confirm actual delimiters/encoding behavior."
+ },
+ {
+ "id": "SRC-MARKDOWN",
+ "type": "specification",
+ "url": "https://spec.commonmark.org/0.31.2/",
+ "retrieved": "2026-11-05",
+ "status": "READ",
+ "note": "Pinned Markdown version for blocks and fences. Tables are an extension; inspect current renderer and table dialect separately."
+ },
+ {
+ "id": "SRC-OWASP",
+ "type": "security_guidance",
+ "url": "https://cheatsheetseries.owasp.org/cheatsheets/LLM_Prompt_Injection_Prevention_Cheat_Sheet.html",
+ "retrieved": "2026-11-05",
+ "status": "READ",
+ "note": "Defense guidance does not imply LLMiser implements those controls or that any single control is complete."
+ },
+ {
+ "id": "SRC-INJECTION",
+ "type": "primary_research",
+ "url": "https://www.anthropic.com/research/prompt-injection-defenses",
+ "retrieved": "2026-11-04",
+ "status": "PRIOR_RESEARCH",
+ "note": "Dated prior topic research. Recheck before claiming current defenses."
+ },
+ {
+ "id": "SRC-RETRIEVAL",
+ "type": "official_documentation",
+ "url": "https://learn.microsoft.com/en-us/azure/architecture/ai-ml/guide/rag/rag-information-retrieval",
+ "retrieved": "2026-11-05",
+ "status": "READ",
+ "note": "Filtering/index guidance. Applying it to manual document provenance is an editorial inference, not a LLMiser feature."
+ },
+ {
+ "id": "SRC-OCR-RESEARCH",
+ "type": "local_research_notes",
+ "paths": [
+ "blog-pipeline/research/RESEARCH.md",
+ "blog-pipeline/MAIN_BLOG_AUDIT.md"
+ ],
+ "status": "RESEARCH_STARTING_POINT",
+ "note": "Prior observed search excerpts and audit, not OCR accuracy evidence. Obtain authoritative OCR sources for actual claims."
+ }
+ ],
+ "access_failures": [
+ {
+ "url": "https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/document-embedding",
+ "date": "2026-11-05",
+ "result": "Unavailable through web tool; no claims derived."
+ }
+ ],
+ "metric_access": "No new authenticated keyword dataset or per-engine SERP audit obtained. Keywords are editorial candidates."
+}
diff --git a/blog-pipeline/campaign/support-briefs/M01-S1.md b/blog-pipeline/campaign/support-briefs/M01-S1.md
new file mode 100644
index 0000000..5519a97
--- /dev/null
+++ b/blog-pipeline/campaign/support-briefs/M01-S1.md
@@ -0,0 +1,61 @@
+# M01-S1 — Check a Project ZIP for Secrets Before Sharing It
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M01: 7 Things to Remove Before Sharing a Codebase With AI](../main-briefs/M01.md). Metadata: [intent registry](../../intent-registry.json), `M01-S1`.
+
+## Single reader question
+
+How do I review a sharing copy for credentials and private data?
+
+## Outline
+
+1. Locate configuration and logs
+2. Inspect an extracted sharing copy
+3. Remove sensitive material and recheck
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+## Original example to produce
+
+Toy repo with clearly fake keys, a synthetic log and harmless config. Compare the original and sharing inventory.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+## Exclusions and nearest intents
+
+Do not use real secrets or imply the converter detects credentials.
+
+The parent owns the general checklist. Related support owners:
+
+- [M01-S2](./M01-S2.md): What should remain when installed packages are removed?
+- [M01-S3](./M01-S3.md): How do I select enough source and tests for one code question?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-GIT, SRC-LOCAL. See [sources.json](../sources.json).
+
+## Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Locate configuration and logs”.
+2. Map the decision or procedure in “Inspect an extracted sharing copy”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Remove sensitive material and recheck” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+## Supporting posts
+
+Exactly three separate briefs: [posts for M01-S1](../post-briefs/M01-S1.md). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+## Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/support-briefs/M01-S2.md b/blog-pipeline/campaign/support-briefs/M01-S2.md
new file mode 100644
index 0000000..3e9ef0a
--- /dev/null
+++ b/blog-pipeline/campaign/support-briefs/M01-S2.md
@@ -0,0 +1,61 @@
+# M01-S2 — Which Dependency Files Should You Keep for AI Review?
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M01: 7 Things to Remove Before Sharing a Codebase With AI](../main-briefs/M01.md). Metadata: [intent registry](../../intent-registry.json), `M01-S2`.
+
+## Single reader question
+
+What should remain when installed packages are removed?
+
+## Outline
+
+1. Separate manifests from installed packages
+2. Match files to the review question
+3. Keep version context
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+## Original example to produce
+
+Toy project with package manifest, lockfile, vendor folder and import requiring version context.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+## Exclusions and nearest intents
+
+Do not prescribe removing all lockfiles or all vendored source.
+
+The parent owns the general checklist. Related support owners:
+
+- [M01-S1](./M01-S1.md): How do I review a sharing copy for credentials and private data?
+- [M01-S3](./M01-S3.md): How do I select enough source and tests for one code question?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-GIT, SRC-LOCAL. See [sources.json](../sources.json).
+
+## Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Separate manifests from installed packages”.
+2. Map the decision or procedure in “Match files to the review question”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Keep version context” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+## Supporting posts
+
+Exactly three separate briefs: [posts for M01-S2](../post-briefs/M01-S2.md). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+## Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/support-briefs/M01-S3.md b/blog-pipeline/campaign/support-briefs/M01-S3.md
new file mode 100644
index 0000000..3d14dfc
--- /dev/null
+++ b/blog-pipeline/campaign/support-briefs/M01-S3.md
@@ -0,0 +1,61 @@
+# M01-S3 — Build a Task-Focused Code Bundle With Tests
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M01: 7 Things to Remove Before Sharing a Codebase With AI](../main-briefs/M01.md). Metadata: [intent registry](../../intent-registry.json), `M01-S3`.
+
+## Single reader question
+
+How do I select enough source and tests for one code question?
+
+## Outline
+
+1. Define the question
+2. Trace relevant imports and tests
+3. Review omissions
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+## Original example to produce
+
+Toy bug spanning a caller, helper and test; compare a minimal sufficient bundle with an incomplete one.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+## Exclusions and nearest intents
+
+No universal file-count or answer-quality improvement promise.
+
+The parent owns the general checklist. Related support owners:
+
+- [M01-S1](./M01-S1.md): How do I review a sharing copy for credentials and private data?
+- [M01-S2](./M01-S2.md): What should remain when installed packages are removed?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-GIT, SRC-LOCAL. See [sources.json](../sources.json).
+
+## Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Define the question”.
+2. Map the decision or procedure in “Trace relevant imports and tests”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Review omissions” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+## Supporting posts
+
+Exactly three separate briefs: [posts for M01-S3](../post-briefs/M01-S3.md). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+## Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/support-briefs/M02-S1.md b/blog-pipeline/campaign/support-briefs/M02-S1.md
new file mode 100644
index 0000000..f920f80
--- /dev/null
+++ b/blog-pipeline/campaign/support-briefs/M02-S1.md
@@ -0,0 +1,61 @@
+# M02-S1 — Check Rotated Scans Before Running OCR
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M02: 9 OCR Checks Before You Send Scanned Text to AI](../main-briefs/M02.md). Metadata: [intent registry](../../intent-registry.json), `M02-S1`.
+
+## Single reader question
+
+How does orientation affect recognition in a specific sample?
+
+## Outline
+
+1. Inspect orientation
+2. Compare original and corrected copy
+3. Check output against both
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+## Original example to produce
+
+Synthetic English image at 0 and 90 degrees, plus a carefully rotated copy; save actual outputs.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+## Exclusions and nearest intents
+
+Do not claim LLMiser always corrects rotation automatically.
+
+The parent owns the general checklist. Related support owners:
+
+- [M02-S2](./M02-S2.md): How do I verify digits and labels without trusting fluent OCR text?
+- [M02-S3](./M02-S3.md): How do I confirm that a PDF with text and scanned pages is represented?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-LOCAL, SRC-OCR-RESEARCH. See [sources.json](../sources.json).
+
+## Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Inspect orientation”.
+2. Map the decision or procedure in “Compare original and corrected copy”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Check output against both” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+## Supporting posts
+
+Exactly three separate briefs: [posts for M02-S1](../post-briefs/M02-S1.md). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+## Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/support-briefs/M02-S2.md b/blog-pipeline/campaign/support-briefs/M02-S2.md
new file mode 100644
index 0000000..cffa4de
--- /dev/null
+++ b/blog-pipeline/campaign/support-briefs/M02-S2.md
@@ -0,0 +1,61 @@
+# M02-S2 — Verify Numbers and Identifiers in OCR Output
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M02: 9 OCR Checks Before You Send Scanned Text to AI](../main-briefs/M02.md). Metadata: [intent registry](../../intent-registry.json), `M02-S2`.
+
+## Single reader question
+
+How do I verify digits and labels without trusting fluent OCR text?
+
+## Outline
+
+1. Locate high-impact fields
+2. Compare exact characters and separators
+3. Record corrections
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+## Original example to produce
+
+Synthetic invoice with 00123, 10.50, a date and letter O/zero examples.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+## Exclusions and nearest intents
+
+No financial recommendation; report character fidelity, not invented accuracy rates.
+
+The parent owns the general checklist. Related support owners:
+
+- [M02-S1](./M02-S1.md): How does orientation affect recognition in a specific sample?
+- [M02-S3](./M02-S3.md): How do I confirm that a PDF with text and scanned pages is represented?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-LOCAL, SRC-OCR-RESEARCH. See [sources.json](../sources.json).
+
+## Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Locate high-impact fields”.
+2. Map the decision or procedure in “Compare exact characters and separators”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Record corrections” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+## Supporting posts
+
+Exactly three separate briefs: [posts for M02-S2](../post-briefs/M02-S2.md). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+## Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/support-briefs/M02-S3.md b/blog-pipeline/campaign/support-briefs/M02-S3.md
new file mode 100644
index 0000000..3344dc2
--- /dev/null
+++ b/blog-pipeline/campaign/support-briefs/M02-S3.md
@@ -0,0 +1,61 @@
+# M02-S3 — Check OCR Coverage in a Mixed PDF
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M02: 9 OCR Checks Before You Send Scanned Text to AI](../main-briefs/M02.md). Metadata: [intent registry](../../intent-registry.json), `M02-S3`.
+
+## Single reader question
+
+How do I confirm that a PDF with text and scanned pages is represented?
+
+## Outline
+
+1. Inventory page types
+2. Locate each page in output
+3. Investigate missing or duplicate text
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+## Original example to produce
+
+Three-page fixture with native text, image-only text and an intentional blank page.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+## Exclusions and nearest intents
+
+No page-level OCR routing or page-count guarantee without observed evidence.
+
+The parent owns the general checklist. Related support owners:
+
+- [M02-S1](./M02-S1.md): How does orientation affect recognition in a specific sample?
+- [M02-S2](./M02-S2.md): How do I verify digits and labels without trusting fluent OCR text?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-LOCAL, SRC-OCR-RESEARCH. See [sources.json](../sources.json).
+
+## Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Inventory page types”.
+2. Map the decision or procedure in “Locate each page in output”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Investigate missing or duplicate text” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+## Supporting posts
+
+Exactly three separate briefs: [posts for M02-S3](../post-briefs/M02-S3.md). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+## Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/support-briefs/M03-S1.md b/blog-pipeline/campaign/support-briefs/M03-S1.md
new file mode 100644
index 0000000..d60bf83
--- /dev/null
+++ b/blog-pipeline/campaign/support-briefs/M03-S1.md
@@ -0,0 +1,61 @@
+# M03-S1 — Keep Leading Zeros When Preparing Excel Data for AI
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M03: 7 Excel Details to Check Before Sharing Data With AI](../main-briefs/M03.md). Metadata: [intent registry](../../intent-registry.json), `M03-S1`.
+
+## Single reader question
+
+How do I distinguish identifiers from numeric quantities?
+
+## Outline
+
+1. Identify identifier columns
+2. Inspect stored value versus formatting
+3. Compare converted output
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+## Original example to produce
+
+Workbook with text 00123, numeric 123 formatted as 00000 and a long ID.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+## Exclusions and nearest intents
+
+Display formatting and stored values may differ; conversion cannot restore lost digits.
+
+The parent owns the general checklist. Related support owners:
+
+- [M03-S2](./M03-S2.md): What evidence shows whether formula results are current?
+- [M03-S3](./M03-S3.md): How can I make multi-level spreadsheet labels unambiguous?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-EXCEL, SRC-LOCAL. See [sources.json](../sources.json).
+
+## Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Identify identifier columns”.
+2. Map the decision or procedure in “Inspect stored value versus formatting”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Compare converted output” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+## Supporting posts
+
+Exactly three separate briefs: [posts for M03-S1](../post-briefs/M03-S1.md). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+## Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/support-briefs/M03-S2.md b/blog-pipeline/campaign/support-briefs/M03-S2.md
new file mode 100644
index 0000000..3e5ded4
--- /dev/null
+++ b/blog-pipeline/campaign/support-briefs/M03-S2.md
@@ -0,0 +1,61 @@
+# M03-S2 — Check Excel Formula Results Before Conversion
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M03: 7 Excel Details to Check Before Sharing Data With AI](../main-briefs/M03.md). Metadata: [intent registry](../../intent-registry.json), `M03-S2`.
+
+## Single reader question
+
+What evidence shows whether formula results are current?
+
+## Outline
+
+1. Separate formulas from calculated values
+2. Save a reviewed source copy
+3. Inspect actual Markdown values
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+## Original example to produce
+
+Workbook with formula, known result and a stale/absent cached-value case where reproducible.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+## Exclusions and nearest intents
+
+Do not claim the converter recalculates formulas; record app and workbook provenance.
+
+The parent owns the general checklist. Related support owners:
+
+- [M03-S1](./M03-S1.md): How do I distinguish identifiers from numeric quantities?
+- [M03-S3](./M03-S3.md): How can I make multi-level spreadsheet labels unambiguous?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-EXCEL, SRC-LOCAL. See [sources.json](../sources.json).
+
+## Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Separate formulas from calculated values”.
+2. Map the decision or procedure in “Save a reviewed source copy”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Inspect actual Markdown values” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+## Supporting posts
+
+Exactly three separate briefs: [posts for M03-S2](../post-briefs/M03-S2.md). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+## Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/support-briefs/M03-S3.md b/blog-pipeline/campaign/support-briefs/M03-S3.md
new file mode 100644
index 0000000..e9ed096
--- /dev/null
+++ b/blog-pipeline/campaign/support-briefs/M03-S3.md
@@ -0,0 +1,61 @@
+# M03-S3 — Prepare Merged Excel Headers for Markdown Tables
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M03: 7 Excel Details to Check Before Sharing Data With AI](../main-briefs/M03.md). Metadata: [intent registry](../../intent-registry.json), `M03-S3`.
+
+## Single reader question
+
+How can I make multi-level spreadsheet labels unambiguous?
+
+## Outline
+
+1. Identify grouped labels
+2. Create a clearly labeled sharing copy
+3. Compare row-column meaning
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+## Original example to produce
+
+Small two-level header workbook and manually flattened copy with units retained.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+## Exclusions and nearest intents
+
+Manual flattening must preserve meaning; no automatic merged-cell repair claim.
+
+The parent owns the general checklist. Related support owners:
+
+- [M03-S1](./M03-S1.md): How do I distinguish identifiers from numeric quantities?
+- [M03-S2](./M03-S2.md): What evidence shows whether formula results are current?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-EXCEL, SRC-LOCAL. See [sources.json](../sources.json).
+
+## Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Identify grouped labels”.
+2. Map the decision or procedure in “Create a clearly labeled sharing copy”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Compare row-column meaning” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+## Supporting posts
+
+Exactly three separate briefs: [posts for M03-S3](../post-briefs/M03-S3.md). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+## Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/support-briefs/M04-S1.md b/blog-pipeline/campaign/support-briefs/M04-S1.md
new file mode 100644
index 0000000..ce99a53
--- /dev/null
+++ b/blog-pipeline/campaign/support-briefs/M04-S1.md
@@ -0,0 +1,61 @@
+# M04-S1 — Use Word Heading Styles Before Markdown Conversion
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M04: 6 Ways to Prepare Word Documents for AI](../main-briefs/M04.md). Metadata: [intent registry](../../intent-registry.json), `M04-S1`.
+
+## Single reader question
+
+How do semantic styles differ from large bold text?
+
+## Outline
+
+1. Inspect Word styles
+2. Apply a consistent hierarchy
+3. Check Markdown heading levels
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+## Original example to produce
+
+DOCX pair with visually similar bold text versus actual heading styles.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+## Exclusions and nearest intents
+
+General semantic-heading sources do not prove exact DOCX parser behavior; test it.
+
+The parent owns the general checklist. Related support owners:
+
+- [M04-S2](./M04-S2.md): How do I verify parent-child relationships in converted lists?
+- [M04-S3](./M04-S3.md): Which revision view and comments should a shared document represent?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-HEADINGS, SRC-LOCAL. See [sources.json](../sources.json).
+
+## Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Inspect Word styles”.
+2. Map the decision or procedure in “Apply a consistent hierarchy”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Check Markdown heading levels” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+## Supporting posts
+
+Exactly three separate briefs: [posts for M04-S1](../post-briefs/M04-S1.md). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+## Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/support-briefs/M04-S2.md b/blog-pipeline/campaign/support-briefs/M04-S2.md
new file mode 100644
index 0000000..f742bc4
--- /dev/null
+++ b/blog-pipeline/campaign/support-briefs/M04-S2.md
@@ -0,0 +1,61 @@
+# M04-S2 — Check Nested Word Lists in Markdown Output
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M04: 6 Ways to Prepare Word Documents for AI](../main-briefs/M04.md). Metadata: [intent registry](../../intent-registry.json), `M04-S2`.
+
+## Single reader question
+
+How do I verify parent-child relationships in converted lists?
+
+## Outline
+
+1. Identify list levels
+2. Compare item order and nesting
+3. Repair a working copy and recheck
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+## Original example to produce
+
+DOCX with nested numbered and bulleted items, including restarted numbering.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+## Exclusions and nearest intents
+
+Do not promise lossless numbering; preserve the original.
+
+The parent owns the general checklist. Related support owners:
+
+- [M04-S1](./M04-S1.md): How do semantic styles differ from large bold text?
+- [M04-S3](./M04-S3.md): Which revision view and comments should a shared document represent?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-HEADINGS, SRC-LOCAL. See [sources.json](../sources.json).
+
+## Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Identify list levels”.
+2. Map the decision or procedure in “Compare item order and nesting”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Repair a working copy and recheck” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+## Supporting posts
+
+Exactly three separate briefs: [posts for M04-S2](../post-briefs/M04-S2.md). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+## Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/support-briefs/M04-S3.md b/blog-pipeline/campaign/support-briefs/M04-S3.md
new file mode 100644
index 0000000..2608e15
--- /dev/null
+++ b/blog-pipeline/campaign/support-briefs/M04-S3.md
@@ -0,0 +1,61 @@
+# M04-S3 — Prepare Word Revisions and Comments for AI Sharing
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M04: 6 Ways to Prepare Word Documents for AI](../main-briefs/M04.md). Metadata: [intent registry](../../intent-registry.json), `M04-S3`.
+
+## Single reader question
+
+Which revision view and comments should a shared document represent?
+
+## Outline
+
+1. Decide the intended revision
+2. Create a reviewed sharing copy
+3. Compare extracted text with that copy
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+## Original example to produce
+
+Synthetic DOCX containing a harmless tracked replacement and comment; record the chosen revision view.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+## Exclusions and nearest intents
+
+Do not silently accept changes or claim all comments are extracted/removed.
+
+The parent owns the general checklist. Related support owners:
+
+- [M04-S1](./M04-S1.md): How do semantic styles differ from large bold text?
+- [M04-S2](./M04-S2.md): How do I verify parent-child relationships in converted lists?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-HEADINGS, SRC-LOCAL. See [sources.json](../sources.json).
+
+## Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Decide the intended revision”.
+2. Map the decision or procedure in “Create a reviewed sharing copy”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Compare extracted text with that copy” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+## Supporting posts
+
+Exactly three separate briefs: [posts for M04-S3](../post-briefs/M04-S3.md). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+## Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/support-briefs/M05-S1.md b/blog-pipeline/campaign/support-briefs/M05-S1.md
new file mode 100644
index 0000000..aa20821
--- /dev/null
+++ b/blog-pipeline/campaign/support-briefs/M05-S1.md
@@ -0,0 +1,61 @@
+# M05-S1 — Check PowerPoint Speaker Notes After Conversion
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M05: 8 Checks When Converting PowerPoint to Markdown](../main-briefs/M05.md). Metadata: [intent registry](../../intent-registry.json), `M05-S1`.
+
+## Single reader question
+
+Are important speaker notes represented in this output?
+
+## Outline
+
+1. Inventory slides with notes
+2. Compare slide text and note text
+3. Provide missing context explicitly
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+## Original example to produce
+
+Three-slide deck with notes on one slide and no notes on another.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+## Exclusions and nearest intents
+
+Notes extraction is a test question, not an advertised verified feature.
+
+The parent owns the general checklist. Related support owners:
+
+- [M05-S2](./M05-S2.md): What chart information must accompany a text-only slide export?
+- [M05-S3](./M05-S3.md): How do I retain the sequence needed to interpret a deck?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-LOCAL. See [sources.json](../sources.json).
+
+## Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Inventory slides with notes”.
+2. Map the decision or procedure in “Compare slide text and note text”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Provide missing context explicitly” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+## Supporting posts
+
+Exactly three separate briefs: [posts for M05-S1](../post-briefs/M05-S1.md). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+## Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/support-briefs/M05-S2.md b/blog-pipeline/campaign/support-briefs/M05-S2.md
new file mode 100644
index 0000000..5fef451
--- /dev/null
+++ b/blog-pipeline/campaign/support-briefs/M05-S2.md
@@ -0,0 +1,61 @@
+# M05-S2 — Carry Chart Context From Slides Into AI Prompts
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M05: 8 Checks When Converting PowerPoint to Markdown](../main-briefs/M05.md). Metadata: [intent registry](../../intent-registry.json), `M05-S2`.
+
+## Single reader question
+
+What chart information must accompany a text-only slide export?
+
+## Outline
+
+1. Identify the question and chart evidence
+2. Record axes units and legend
+3. Keep the visual when needed
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+## Original example to produce
+
+Original chart with labels, units and a visible trend; write a checked textual description.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+## Exclusions and nearest intents
+
+Never infer values that were not readable or claim automatic chart understanding.
+
+The parent owns the general checklist. Related support owners:
+
+- [M05-S1](./M05-S1.md): Are important speaker notes represented in this output?
+- [M05-S3](./M05-S3.md): How do I retain the sequence needed to interpret a deck?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-LOCAL. See [sources.json](../sources.json).
+
+## Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Identify the question and chart evidence”.
+2. Map the decision or procedure in “Record axes units and legend”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Keep the visual when needed” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+## Supporting posts
+
+Exactly three separate briefs: [posts for M05-S2](../post-briefs/M05-S2.md). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+## Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/support-briefs/M05-S3.md b/blog-pipeline/campaign/support-briefs/M05-S3.md
new file mode 100644
index 0000000..d69753d
--- /dev/null
+++ b/blog-pipeline/campaign/support-briefs/M05-S3.md
@@ -0,0 +1,61 @@
+# M05-S3 — Keep Slide Titles and Order Clear in Markdown
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M05: 8 Checks When Converting PowerPoint to Markdown](../main-briefs/M05.md). Metadata: [intent registry](../../intent-registry.json), `M05-S3`.
+
+## Single reader question
+
+How do I retain the sequence needed to interpret a deck?
+
+## Outline
+
+1. Map slide sequence
+2. Check title-to-body association
+3. Verify rearranged or repeated titles
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+## Original example to produce
+
+Deck with repeated titles, a section slide and a sequence-dependent explanation.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+## Exclusions and nearest intents
+
+No artificial page/slide numbers unless traced to the source.
+
+The parent owns the general checklist. Related support owners:
+
+- [M05-S1](./M05-S1.md): Are important speaker notes represented in this output?
+- [M05-S2](./M05-S2.md): What chart information must accompany a text-only slide export?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-LOCAL. See [sources.json](../sources.json).
+
+## Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Map slide sequence”.
+2. Map the decision or procedure in “Check title-to-body association”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Verify rearranged or repeated titles” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+## Supporting posts
+
+Exactly three separate briefs: [posts for M05-S3](../post-briefs/M05-S3.md). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+## Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/support-briefs/M06-S1.md b/blog-pipeline/campaign/support-briefs/M06-S1.md
new file mode 100644
index 0000000..2345554
--- /dev/null
+++ b/blog-pipeline/campaign/support-briefs/M06-S1.md
@@ -0,0 +1,61 @@
+# M06-S1 — Handle Commas and Quotes Inside CSV Cells
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M06: 7 Ways to Prepare Cleaner CSV Data for AI](../main-briefs/M06.md). Metadata: [intent registry](../../intent-registry.json), `M06-S1`.
+
+## Single reader question
+
+How do I verify that quoted separators remain inside a cell?
+
+## Outline
+
+1. Identify separator and quoting
+2. Test embedded commas and newlines
+3. Check resulting row widths
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+## Original example to produce
+
+Synthetic CSV with comma inside quotes, escaped quote and embedded newline.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+## Exclusions and nearest intents
+
+Do not recommend global comma replacement or splitting on commas without a CSV parser.
+
+The parent owns the general checklist. Related support owners:
+
+- [M06-S2](./M06-S2.md): How can I diagnose corrupted text before using converted output?
+- [M06-S3](./M06-S3.md): How do missing delimiters differ from intentionally blank values?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-CSV, SRC-LOCAL. See [sources.json](../sources.json).
+
+## Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Identify separator and quoting”.
+2. Map the decision or procedure in “Test embedded commas and newlines”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Check resulting row widths” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+## Supporting posts
+
+Exactly three separate briefs: [posts for M06-S1](../post-briefs/M06-S1.md). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+## Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/support-briefs/M06-S2.md b/blog-pipeline/campaign/support-briefs/M06-S2.md
new file mode 100644
index 0000000..7497999
--- /dev/null
+++ b/blog-pipeline/campaign/support-briefs/M06-S2.md
@@ -0,0 +1,61 @@
+# M06-S2 — Check CSV Encoding Before Sharing Text With AI
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M06: 7 Ways to Prepare Cleaner CSV Data for AI](../main-briefs/M06.md). Metadata: [intent registry](../../intent-registry.json), `M06-S2`.
+
+## Single reader question
+
+How can I diagnose corrupted text before using converted output?
+
+## Outline
+
+1. Identify the source encoding
+2. Compare representative characters
+3. Export a verified copy
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+## Original example to produce
+
+UTF-8 sample with accented names and a deliberately misdecoded demonstration; no personal data.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+## Exclusions and nearest intents
+
+Do not claim encoding detection is infallible or imply interface languages change OCR.
+
+The parent owns the general checklist. Related support owners:
+
+- [M06-S1](./M06-S1.md): How do I verify that quoted separators remain inside a cell?
+- [M06-S3](./M06-S3.md): How do missing delimiters differ from intentionally blank values?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-CSV, SRC-LOCAL. See [sources.json](../sources.json).
+
+## Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Identify the source encoding”.
+2. Map the decision or procedure in “Compare representative characters”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Export a verified copy” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+## Supporting posts
+
+Exactly three separate briefs: [posts for M06-S2](../post-briefs/M06-S2.md). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+## Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/support-briefs/M06-S3.md b/blog-pipeline/campaign/support-briefs/M06-S3.md
new file mode 100644
index 0000000..9ac9196
--- /dev/null
+++ b/blog-pipeline/campaign/support-briefs/M06-S3.md
@@ -0,0 +1,61 @@
+# M06-S3 — Distinguish Empty CSV Cells From Missing Fields
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M06: 7 Ways to Prepare Cleaner CSV Data for AI](../main-briefs/M06.md). Metadata: [intent registry](../../intent-registry.json), `M06-S3`.
+
+## Single reader question
+
+How do missing delimiters differ from intentionally blank values?
+
+## Outline
+
+1. Define expected columns
+2. Compare blank and absent fields
+3. Validate a reviewed sample
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+## Original example to produce
+
+Rows with a blank middle cell, missing last field and extra delimiter.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+## Exclusions and nearest intents
+
+Keep missing-value decisions explicit; do not fill invented values.
+
+The parent owns the general checklist. Related support owners:
+
+- [M06-S1](./M06-S1.md): How do I verify that quoted separators remain inside a cell?
+- [M06-S2](./M06-S2.md): How can I diagnose corrupted text before using converted output?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-CSV, SRC-LOCAL. See [sources.json](../sources.json).
+
+## Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Define expected columns”.
+2. Map the decision or procedure in “Compare blank and absent fields”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Validate a reviewed sample” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+## Supporting posts
+
+Exactly three separate briefs: [posts for M06-S3](../post-briefs/M06-S3.md). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+## Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/support-briefs/M07-S1.md b/blog-pipeline/campaign/support-briefs/M07-S1.md
new file mode 100644
index 0000000..18c296c
--- /dev/null
+++ b/blog-pipeline/campaign/support-briefs/M07-S1.md
@@ -0,0 +1,61 @@
+# M07-S1 — Plan a Batch With Different Supported File Types
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M07: How to Convert Multiple Files With LLMiser](../main-briefs/M07.md). Metadata: [intent registry](../../intent-registry.json), `M07-S1`.
+
+## Single reader question
+
+How do I organize a supported mixed-format batch?
+
+## Outline
+
+1. Check each format against current UI
+2. Group files by review needs
+3. Track each output separately
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+## Original example to produce
+
+Small PDF, DOCX and image fixture set with identifiable content in each.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+## Exclusions and nearest intents
+
+Not a worker architecture article; no unsupported formats or uniform-speed promise.
+
+The parent owns the general checklist. Related support owners:
+
+- [M07-S2](./M07-S2.md): How do I recover when some files finish and others fail?
+- [M07-S3](./M07-S3.md): How do I plan a batch that meets documented per-file and queue limits?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-LOCAL. See [sources.json](../sources.json).
+
+## Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Check each format against current UI”.
+2. Map the decision or procedure in “Group files by review needs”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Track each output separately” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+## Supporting posts
+
+Exactly three separate briefs: [posts for M07-S1](../post-briefs/M07-S1.md). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+## Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/support-briefs/M07-S2.md b/blog-pipeline/campaign/support-briefs/M07-S2.md
new file mode 100644
index 0000000..01d0788
--- /dev/null
+++ b/blog-pipeline/campaign/support-briefs/M07-S2.md
@@ -0,0 +1,61 @@
+# M07-S2 — Handle Partial Conversion Failures in a Batch
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M07: How to Convert Multiple Files With LLMiser](../main-briefs/M07.md). Metadata: [intent registry](../../intent-registry.json), `M07-S2`.
+
+## Single reader question
+
+How do I recover when some files finish and others fail?
+
+## Outline
+
+1. Identify completed and failed items
+2. Save successful results
+3. Retry only where current UI supports it
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+## Original example to produce
+
+One valid document plus an intentionally invalid supported-format fixture in a controlled local/test environment.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+## Exclusions and nearest intents
+
+Do not create production load; verify retry controls and avoid automatic full-batch reuploads.
+
+The parent owns the general checklist. Related support owners:
+
+- [M07-S1](./M07-S1.md): How do I organize a supported mixed-format batch?
+- [M07-S3](./M07-S3.md): How do I plan a batch that meets documented per-file and queue limits?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-LOCAL. See [sources.json](../sources.json).
+
+## Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Identify completed and failed items”.
+2. Map the decision or procedure in “Save successful results”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Retry only where current UI supports it” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+## Supporting posts
+
+Exactly three separate briefs: [posts for M07-S2](../post-briefs/M07-S2.md). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+## Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/support-briefs/M07-S3.md b/blog-pipeline/campaign/support-briefs/M07-S3.md
new file mode 100644
index 0000000..266026e
--- /dev/null
+++ b/blog-pipeline/campaign/support-briefs/M07-S3.md
@@ -0,0 +1,61 @@
+# M07-S3 — Split a File Batch Around LLMiser's Upload Limits
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M07: How to Convert Multiple Files With LLMiser](../main-briefs/M07.md). Metadata: [intent registry](../../intent-registry.json), `M07-S3`.
+
+## Single reader question
+
+How do I plan a batch that meets documented per-file and queue limits?
+
+## Outline
+
+1. Read current limits
+2. Separate queue count from file size
+3. Choose a smaller source or batch
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+## Original example to produce
+
+Local file-size/count inventory and UI validation checks; no oversized production upload necessary.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+## Exclusions and nearest intents
+
+Do not promise splitting the queue fixes an oversized individual file.
+
+The parent owns the general checklist. Related support owners:
+
+- [M07-S1](./M07-S1.md): How do I organize a supported mixed-format batch?
+- [M07-S2](./M07-S2.md): How do I recover when some files finish and others fail?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-LOCAL. See [sources.json](../sources.json).
+
+## Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Read current limits”.
+2. Map the decision or procedure in “Separate queue count from file size”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Choose a smaller source or batch” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+## Supporting posts
+
+Exactly three separate briefs: [posts for M07-S3](../post-briefs/M07-S3.md). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+## Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/support-briefs/M08-S1.md b/blog-pipeline/campaign/support-briefs/M08-S1.md
new file mode 100644
index 0000000..22048fb
--- /dev/null
+++ b/blog-pipeline/campaign/support-briefs/M08-S1.md
@@ -0,0 +1,61 @@
+# M08-S1 — Standard vs Clean: Compare LLMiser Output
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M08: LLMiser Profiles: Standard, Clean, Compact, RAG-ready](../main-briefs/M08.md). Metadata: [intent registry](../../intent-registry.json), `M08-S1`.
+
+## Single reader question
+
+What changes between Standard and Clean for the same input?
+
+## Outline
+
+1. Use one fixture
+2. Compare source line and whitespace
+3. Check content retained
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+## Original example to produce
+
+Same short Markdown/document input under both profiles, saved as an actual diff.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+## Exclusions and nearest intents
+
+Do not claim semantic cleanup, deduplication or privacy sanitization.
+
+The parent owns the general checklist. Related support owners:
+
+- [M08-S2](./M08-S2.md): What needs checking when compact formatting removes separators or spacing?
+- [M08-S3](./M08-S3.md): What does a chunk-boundary marker communicate and what does it not do?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-LOCAL, SRC-MARKDOWN. See [sources.json](../sources.json).
+
+## Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Use one fixture”.
+2. Map the decision or procedure in “Compare source line and whitespace”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Check content retained” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+## Supporting posts
+
+Exactly three separate briefs: [posts for M08-S1](../post-briefs/M08-S1.md). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+## Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/support-briefs/M08-S2.md b/blog-pipeline/campaign/support-briefs/M08-S2.md
new file mode 100644
index 0000000..e55bf5b
--- /dev/null
+++ b/blog-pipeline/campaign/support-briefs/M08-S2.md
@@ -0,0 +1,61 @@
+# M08-S2 — Check Compact Markdown Before You Use It
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M08: LLMiser Profiles: Standard, Clean, Compact, RAG-ready](../main-briefs/M08.md). Metadata: [intent registry](../../intent-registry.json), `M08-S2`.
+
+## Single reader question
+
+What needs checking when compact formatting removes separators or spacing?
+
+## Outline
+
+1. Inspect the actual transformations
+2. Check structure-sensitive content
+3. Choose readability versus compactness
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+## Original example to produce
+
+Fixture with blank lines, horizontal rules, table syntax and hyphen sequences; compare all bytes.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+## Exclusions and nearest intents
+
+No assumed token savings or universally valid table preservation; record unexpected changes.
+
+The parent owns the general checklist. Related support owners:
+
+- [M08-S1](./M08-S1.md): What changes between Standard and Clean for the same input?
+- [M08-S3](./M08-S3.md): What does a chunk-boundary marker communicate and what does it not do?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-LOCAL, SRC-MARKDOWN. See [sources.json](../sources.json).
+
+## Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Inspect the actual transformations”.
+2. Map the decision or procedure in “Check structure-sensitive content”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Choose readability versus compactness” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+## Supporting posts
+
+Exactly three separate briefs: [posts for M08-S2](../post-briefs/M08-S2.md). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+## Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/support-briefs/M08-S3.md b/blog-pipeline/campaign/support-briefs/M08-S3.md
new file mode 100644
index 0000000..c1780db
--- /dev/null
+++ b/blog-pipeline/campaign/support-briefs/M08-S3.md
@@ -0,0 +1,61 @@
+# M08-S3 — What LLMiser's RAG-ready Markers Do
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M08: LLMiser Profiles: Standard, Clean, Compact, RAG-ready](../main-briefs/M08.md). Metadata: [intent registry](../../intent-registry.json), `M08-S3`.
+
+## Single reader question
+
+What does a chunk-boundary marker communicate and what does it not do?
+
+## Outline
+
+1. Locate markers in real output
+2. Explain heading alignment
+3. Separate markers from downstream splitting
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+## Original example to produce
+
+Fixture with H1/H2/H3 and fenced text; inspect marker placement without publishing a fragile splitter.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+## Exclusions and nearest intents
+
+No embedding/retrieval service or semantic chunking guarantee; heed existing E08 code audit.
+
+The parent owns the general checklist. Related support owners:
+
+- [M08-S1](./M08-S1.md): What changes between Standard and Clean for the same input?
+- [M08-S2](./M08-S2.md): What needs checking when compact formatting removes separators or spacing?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-LOCAL, SRC-MARKDOWN. See [sources.json](../sources.json).
+
+## Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Locate markers in real output”.
+2. Map the decision or procedure in “Explain heading alignment”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Separate markers from downstream splitting” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+## Supporting posts
+
+Exactly three separate briefs: [posts for M08-S3](../post-briefs/M08-S3.md). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+## Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/support-briefs/M09-S1.md b/blog-pipeline/campaign/support-briefs/M09-S1.md
new file mode 100644
index 0000000..9bed81e
--- /dev/null
+++ b/blog-pipeline/campaign/support-briefs/M09-S1.md
@@ -0,0 +1,61 @@
+# M09-S1 — Original or Edited Markdown: Which File Are You Saving?
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M09: How to Edit and Export Markdown With LLMiser](../main-briefs/M09.md). Metadata: [intent registry](../../intent-registry.json), `M09-S1`.
+
+## Single reader question
+
+How can I tell whether an export includes my edits?
+
+## Outline
+
+1. Identify source result and editor state
+2. Make a harmless visible edit
+3. Compare saved outputs
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+## Original example to produce
+
+Tiny fixture with a unique marker inserted in editor; compare copy/download/recovery behavior.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+## Exclusions and nearest intents
+
+Verify each action in current UI; do not assume edits persist across refresh or recovery.
+
+The parent owns the general checklist. Related support owners:
+
+- [M09-S2](./M09-S2.md): How do I distinguish a limited rendering view from incomplete output?
+- [M09-S3](./M09-S3.md): What should I check after moving Markdown to another app?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-LOCAL, SRC-MARKDOWN. See [sources.json](../sources.json).
+
+## Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Identify source result and editor state”.
+2. Map the decision or procedure in “Make a harmless visible edit”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Compare saved outputs” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+## Supporting posts
+
+Exactly three separate briefs: [posts for M09-S1](../post-briefs/M09-S1.md). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+## Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/support-briefs/M09-S2.md b/blog-pipeline/campaign/support-briefs/M09-S2.md
new file mode 100644
index 0000000..4006728
--- /dev/null
+++ b/blog-pipeline/campaign/support-briefs/M09-S2.md
@@ -0,0 +1,61 @@
+# M09-S2 — Check Long Markdown Beyond the Preview
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M09: How to Edit and Export Markdown With LLMiser](../main-briefs/M09.md). Metadata: [intent registry](../../intent-registry.json), `M09-S2`.
+
+## Single reader question
+
+How do I distinguish a limited rendering view from incomplete output?
+
+## Outline
+
+1. Identify the preview mode
+2. Locate start middle and end
+3. Compare raw export coverage
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+## Original example to produce
+
+Synthetic long text with markers at start, middle and end; inspect current preview/export behavior.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+## Exclusions and nearest intents
+
+No current size threshold claim without code/UI verification; missing content must be reported.
+
+The parent owns the general checklist. Related support owners:
+
+- [M09-S1](./M09-S1.md): How can I tell whether an export includes my edits?
+- [M09-S3](./M09-S3.md): What should I check after moving Markdown to another app?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-LOCAL, SRC-MARKDOWN. See [sources.json](../sources.json).
+
+## Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Identify the preview mode”.
+2. Map the decision or procedure in “Locate start middle and end”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Compare raw export coverage” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+## Supporting posts
+
+Exactly three separate briefs: [posts for M09-S2](../post-briefs/M09-S2.md). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+## Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/support-briefs/M09-S3.md b/blog-pipeline/campaign/support-briefs/M09-S3.md
new file mode 100644
index 0000000..c8f27c1
--- /dev/null
+++ b/blog-pipeline/campaign/support-briefs/M09-S3.md
@@ -0,0 +1,61 @@
+# M09-S3 — Copy or Download Markdown: Check the Result
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M09: How to Edit and Export Markdown With LLMiser](../main-briefs/M09.md). Metadata: [intent registry](../../intent-registry.json), `M09-S3`.
+
+## Single reader question
+
+What should I check after moving Markdown to another app?
+
+## Outline
+
+1. Choose clipboard or file transfer
+2. Check characters and code fences
+3. Compare the destination with saved text
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+## Original example to produce
+
+Small Unicode, pipe-table and fenced-code fixture copied to a plain text editor and downloaded.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+## Exclusions and nearest intents
+
+Destination apps may reformat; no promise of every platform preserving Markdown.
+
+The parent owns the general checklist. Related support owners:
+
+- [M09-S1](./M09-S1.md): How can I tell whether an export includes my edits?
+- [M09-S2](./M09-S2.md): How do I distinguish a limited rendering view from incomplete output?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-LOCAL, SRC-MARKDOWN. See [sources.json](../sources.json).
+
+## Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Choose clipboard or file transfer”.
+2. Map the decision or procedure in “Check characters and code fences”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Compare the destination with saved text” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+## Supporting posts
+
+Exactly three separate briefs: [posts for M09-S3](../post-briefs/M09-S3.md). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+## Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/support-briefs/M10-S1.md b/blog-pipeline/campaign/support-briefs/M10-S1.md
new file mode 100644
index 0000000..da33c20
--- /dev/null
+++ b/blog-pipeline/campaign/support-briefs/M10-S1.md
@@ -0,0 +1,61 @@
+# M10-S1 — Find Relevant Files in PROJECT_INDEX.md
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M10: How to Read LLMiser's ZIP Index and Manifest](../main-briefs/M10.md). Metadata: [intent registry](../../intent-registry.json), `M10-S1`.
+
+## Single reader question
+
+How do source paths help locate the right converted file?
+
+## Outline
+
+1. Read the actual index layout
+2. Distinguish repeated basenames
+3. Find the corresponding content
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+## Original example to produce
+
+ZIP with src/config.txt and docs/config.txt containing different text; inspect index and combined output.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+## Exclusions and nearest intents
+
+Use actual current index format; no invented links or schema fields.
+
+The parent owns the general checklist. Related support owners:
+
+- [M10-S2](./M10-S2.md): How do I account for every intended source item after conversion?
+- [M10-S3](./M10-S3.md): How do I distinguish an intentional exclusion from a conversion omission?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-LOCAL. See [sources.json](../sources.json).
+
+## Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Read the actual index layout”.
+2. Map the decision or procedure in “Distinguish repeated basenames”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Find the corresponding content” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+## Supporting posts
+
+Exactly three separate briefs: [posts for M10-S1](../post-briefs/M10-S1.md). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+## Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/support-briefs/M10-S2.md b/blog-pipeline/campaign/support-briefs/M10-S2.md
new file mode 100644
index 0000000..7a2d5a4
--- /dev/null
+++ b/blog-pipeline/campaign/support-briefs/M10-S2.md
@@ -0,0 +1,61 @@
+# M10-S2 — Reconcile a ZIP Manifest With Your Source Files
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M10: How to Read LLMiser's ZIP Index and Manifest](../main-briefs/M10.md). Metadata: [intent registry](../../intent-registry.json), `M10-S2`.
+
+## Single reader question
+
+How do I account for every intended source item after conversion?
+
+## Outline
+
+1. Create an expected inventory
+2. Read actual outcome fields
+3. Reconcile counts and unresolved items
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+## Original example to produce
+
+Tiny ZIP inventory with valid supported entries and a deliberately unsupported harmless item; save actual manifest.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+## Exclusions and nearest intents
+
+Never infer that every source was converted from a successful overall status.
+
+The parent owns the general checklist. Related support owners:
+
+- [M10-S1](./M10-S1.md): How do source paths help locate the right converted file?
+- [M10-S3](./M10-S3.md): How do I distinguish an intentional exclusion from a conversion omission?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-LOCAL. See [sources.json](../sources.json).
+
+## Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Create an expected inventory”.
+2. Map the decision or procedure in “Read actual outcome fields”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Reconcile counts and unresolved items” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+## Supporting posts
+
+Exactly three separate briefs: [posts for M10-S2](../post-briefs/M10-S2.md). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+## Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/support-briefs/M10-S3.md b/blog-pipeline/campaign/support-briefs/M10-S3.md
new file mode 100644
index 0000000..0672bae
--- /dev/null
+++ b/blog-pipeline/campaign/support-briefs/M10-S3.md
@@ -0,0 +1,61 @@
+# M10-S3 — Investigate Missing Content in a ZIP Conversion
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M10: How to Read LLMiser's ZIP Index and Manifest](../main-briefs/M10.md). Metadata: [intent registry](../../intent-registry.json), `M10-S3`.
+
+## Single reader question
+
+How do I distinguish an intentional exclusion from a conversion omission?
+
+## Outline
+
+1. Locate the expected entry
+2. Inspect reported restrictions or outcomes
+3. Retry a permitted small source separately
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+## Original example to produce
+
+Controlled nested-archive or unsupported-entry fixture with documented limits; inspect actual result.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+## Exclusions and nearest intents
+
+Do not claim all nested ZIPs are expanded or recommend bypassing limits; separate from pre-upload exclusions in M01.
+
+The parent owns the general checklist. Related support owners:
+
+- [M10-S1](./M10-S1.md): How do source paths help locate the right converted file?
+- [M10-S2](./M10-S2.md): How do I account for every intended source item after conversion?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-LOCAL. See [sources.json](../sources.json).
+
+## Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Locate the expected entry”.
+2. Map the decision or procedure in “Inspect reported restrictions or outcomes”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Retry a permitted small source separately” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+## Supporting posts
+
+Exactly three separate briefs: [posts for M10-S3](../post-briefs/M10-S3.md). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+## Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/support-briefs/M11-S1.md b/blog-pipeline/campaign/support-briefs/M11-S1.md
new file mode 100644
index 0000000..19132a5
--- /dev/null
+++ b/blog-pipeline/campaign/support-briefs/M11-S1.md
@@ -0,0 +1,61 @@
+# M11-S1 — Recognize Instructions Inside an Untrusted Document
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M11: Prompt Injection: Can a Document Hijack Your AI?](../main-briefs/M11.md). Metadata: [intent registry](../../intent-registry.json), `M11-S1`.
+
+## Single reader question
+
+How do I recognize source text attempting to redirect the task?
+
+## Outline
+
+1. Separate user task from source claims
+2. Identify role-like imperatives
+3. Treat suspicious passages as quoted evidence
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+## Original example to produce
+
+Inert local excerpt asking for an unrelated summary style, clearly labeled illustrative; no secret extraction or live attack.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+## Exclusions and nearest intents
+
+Recognition is not proof of detection completeness; cite OWASP and do not execute embedded commands.
+
+The parent owns the general checklist. Related support owners:
+
+- [M11-S2](./M11-S2.md): Why can an instruction attempt survive a change of file format?
+- [M11-S3](./M11-S3.md): What should a reader check before allowing actions derived from a document?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-OWASP, SRC-INJECTION. See [sources.json](../sources.json).
+
+## Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Separate user task from source claims”.
+2. Map the decision or procedure in “Identify role-like imperatives”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Treat suspicious passages as quoted evidence” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+## Supporting posts
+
+Exactly three separate briefs: [posts for M11-S1](../post-briefs/M11-S1.md). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+## Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/support-briefs/M11-S2.md b/blog-pipeline/campaign/support-briefs/M11-S2.md
new file mode 100644
index 0000000..37e9a4c
--- /dev/null
+++ b/blog-pipeline/campaign/support-briefs/M11-S2.md
@@ -0,0 +1,61 @@
+# M11-S2 — Why Markdown Conversion Does Not Remove Prompt Injection
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M11: Prompt Injection: Can a Document Hijack Your AI?](../main-briefs/M11.md). Metadata: [intent registry](../../intent-registry.json), `M11-S2`.
+
+## Single reader question
+
+Why can an instruction attempt survive a change of file format?
+
+## Outline
+
+1. Trace source text into Markdown
+2. Separate formatting from trust
+3. Describe downstream review and permissions
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+## Original example to produce
+
+Harmless imperative preserved through an original text/document conversion; inspect strings only.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+## Exclusions and nearest intents
+
+No claim conversion is a sanitizer or that keyword removal is a complete defense.
+
+The parent owns the general checklist. Related support owners:
+
+- [M11-S1](./M11-S1.md): How do I recognize source text attempting to redirect the task?
+- [M11-S3](./M11-S3.md): What should a reader check before allowing actions derived from a document?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-OWASP, SRC-INJECTION. See [sources.json](../sources.json).
+
+## Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Trace source text into Markdown”.
+2. Map the decision or procedure in “Separate formatting from trust”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Describe downstream review and permissions” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+## Supporting posts
+
+Exactly three separate briefs: [posts for M11-S2](../post-briefs/M11-S2.md). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+## Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/support-briefs/M11-S3.md b/blog-pipeline/campaign/support-briefs/M11-S3.md
new file mode 100644
index 0000000..2613098
--- /dev/null
+++ b/blog-pipeline/campaign/support-briefs/M11-S3.md
@@ -0,0 +1,61 @@
+# M11-S3 — Review AI Actions After Reading External Documents
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M11: Prompt Injection: Can a Document Hijack Your AI?](../main-briefs/M11.md). Metadata: [intent registry](../../intent-registry.json), `M11-S3`.
+
+## Single reader question
+
+What should a reader check before allowing actions derived from a document?
+
+## Outline
+
+1. Identify the requested action
+2. Trace it to user authorization
+3. Review tool permissions and proposed effects
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+## Original example to produce
+
+Paper exercise comparing summarize-only task with a source requesting an external action; no messages sent.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+## Exclusions and nearest intents
+
+Stay defensive; LLMiser does not enforce downstream tool permissions.
+
+The parent owns the general checklist. Related support owners:
+
+- [M11-S1](./M11-S1.md): How do I recognize source text attempting to redirect the task?
+- [M11-S2](./M11-S2.md): Why can an instruction attempt survive a change of file format?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-OWASP, SRC-INJECTION. See [sources.json](../sources.json).
+
+## Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Identify the requested action”.
+2. Map the decision or procedure in “Trace it to user authorization”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Review tool permissions and proposed effects” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+## Supporting posts
+
+Exactly three separate briefs: [posts for M11-S3](../post-briefs/M11-S3.md). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+## Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/support-briefs/M12-S1.md b/blog-pipeline/campaign/support-briefs/M12-S1.md
new file mode 100644
index 0000000..46820ef
--- /dev/null
+++ b/blog-pipeline/campaign/support-briefs/M12-S1.md
@@ -0,0 +1,61 @@
+# M12-S1 — Label Document Versions Before Building AI Context
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M12: Why Two Versions of a Document Can Confuse AI](../main-briefs/M12.md). Metadata: [intent registry](../../intent-registry.json), `M12-S1`.
+
+## Single reader question
+
+Which provenance fields distinguish two versions of a source?
+
+## Outline
+
+1. Record source identity and revision
+2. Separate effective date from download date
+3. Include a compact provenance note
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+## Original example to produce
+
+Two synthetic policy revisions with filename, version and effective date, plus a stable source ID.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+## Exclusions and nearest intents
+
+No fabricated author/date; keep unknown fields explicit and no built-in version-management claim.
+
+The parent owns the general checklist. Related support owners:
+
+- [M12-S2](./M12-S2.md): How do I handle two valid-looking passages with different scopes?
+- [M12-S3](./M12-S3.md): How do I update a manually assembled packet when a source changes?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-RETRIEVAL. See [sources.json](../sources.json).
+
+## Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Record source identity and revision”.
+2. Map the decision or procedure in “Separate effective date from download date”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Include a compact provenance note” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+## Supporting posts
+
+Exactly three separate briefs: [posts for M12-S1](../post-briefs/M12-S1.md). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+## Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/support-briefs/M12-S2.md b/blog-pipeline/campaign/support-briefs/M12-S2.md
new file mode 100644
index 0000000..30760cf
--- /dev/null
+++ b/blog-pipeline/campaign/support-briefs/M12-S2.md
@@ -0,0 +1,61 @@
+# M12-S2 — Resolve Conflicting Policy Passages Before Asking AI
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M12: Why Two Versions of a Document Can Confuse AI](../main-briefs/M12.md). Metadata: [intent registry](../../intent-registry.json), `M12-S2`.
+
+## Single reader question
+
+How do I handle two valid-looking passages with different scopes?
+
+## Outline
+
+1. Compare audience date and applicability
+2. Identify authorized precedence or uncertainty
+3. Ask for clarification when needed
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+## Original example to produce
+
+Two fictional company policies for different teams with different limits; no real legal interpretation.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+## Exclusions and nearest intents
+
+Do not assume newer always wins or silently choose a policy; generic information, not legal advice.
+
+The parent owns the general checklist. Related support owners:
+
+- [M12-S1](./M12-S1.md): Which provenance fields distinguish two versions of a source?
+- [M12-S3](./M12-S3.md): How do I update a manually assembled packet when a source changes?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-RETRIEVAL. See [sources.json](../sources.json).
+
+## Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Compare audience date and applicability”.
+2. Map the decision or procedure in “Identify authorized precedence or uncertainty”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Ask for clarification when needed” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+## Supporting posts
+
+Exactly three separate briefs: [posts for M12-S2](../post-briefs/M12-S2.md). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+## Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/campaign/support-briefs/M12-S3.md b/blog-pipeline/campaign/support-briefs/M12-S3.md
new file mode 100644
index 0000000..8611466
--- /dev/null
+++ b/blog-pipeline/campaign/support-briefs/M12-S3.md
@@ -0,0 +1,61 @@
+# M12-S3 — Remove Stale Excerpts From an AI Context Packet
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M12: Why Two Versions of a Document Can Confuse AI](../main-briefs/M12.md). Metadata: [intent registry](../../intent-registry.json), `M12-S3`.
+
+## Single reader question
+
+How do I update a manually assembled packet when a source changes?
+
+## Outline
+
+1. Identify excerpts tied to the superseded source
+2. Replace and preserve provenance
+3. Test a question affected by the change
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+## Original example to produce
+
+Local packet containing old and new fictional deadlines; trace each excerpt to source revision.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+## Exclusions and nearest intents
+
+No automatic cache/index invalidation feature claimed; distinguish a manual packet from a production RAG index.
+
+The parent owns the general checklist. Related support owners:
+
+- [M12-S1](./M12-S1.md): Which provenance fields distinguish two versions of a source?
+- [M12-S2](./M12-S2.md): How do I handle two valid-looking passages with different scopes?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-RETRIEVAL. See [sources.json](../sources.json).
+
+## Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Identify excerpts tied to the superseded source”.
+2. Map the decision or procedure in “Replace and preserve provenance”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Test a question affected by the change” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+## Supporting posts
+
+Exactly three separate briefs: [posts for M12-S3](../post-briefs/M12-S3.md). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+## Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+## Shared acceptance gates
+
+Read the current brand/style/output rules and [publication checklist](../../PUBLISHING.md). Blogs stay US English. Use one approved Prompt L banner and at least four informative figures, following the existing visual kit. No fake charts, invented prices, savings percentages or test outcomes. No screenshots containing private data.
+
+Keyword volume and difficulty are unmeasured. Before final outline, capture dated query results for this intent and its nearest owner, with engine/locale/device and access limitations. Do not infer unique intent from different title wording. If the proposed support duplicates its parent, replace its task within this cluster rather than adding a fourth support.
+
+All linked campaign URLs are reserved, not live. Drafts stay under Blogs/{slug}/ until publication within the active task scope. A source/code read is not a conversion test. Keep claim-to-source IDs, input hashes, profile/revision/date, output and omissions.
diff --git a/blog-pipeline/check.mjs b/blog-pipeline/check.mjs
new file mode 100644
index 0000000..9048481
--- /dev/null
+++ b/blog-pipeline/check.mjs
@@ -0,0 +1,199 @@
+#!/usr/bin/env node
+// Quality scan for one finished LLMiser article.
+//
+// node blog-pipeline/check.mjs frontend/content/blog/{slug}.md
+//
+// Errors must be fixed before publishing (exit code 1). Warnings need a human
+// decision. The report is printed and saved to Outputs/{slug}.check.txt.
+// Frontmatter is validated by frontend/lib/blog.mjs, the same code the app
+// build uses, so a post that passes here also passes `npm run blog:index`.
+
+import fs from 'node:fs';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+import { parseFrontmatter, toDialogPost, wordCount } from '../frontend/lib/blog.mjs';
+import { collectVisuals } from '../frontend/scripts/build-blog-index.mjs';
+
+const PIPELINE_DIR = path.dirname(fileURLToPath(import.meta.url));
+
+// Keep in sync with 01-STYLE-RULES.md.
+const BANNED_WORDS = `peril fraught thwart dire vibrant bustling essential vital crucial soul crucible
+tapestry landscape pesky reverberate enhance emphasise delve revolutionize folks foster labyrinthine
+labyrinth remnant nestled symphony gossamer enigma metamorphosis indelible embark navigate navigating
+mastering elevate unleash harness meticulous meticulously complexities realm tailored underpins
+everchanging ever-evolving daunting amongst robust seamless seamlessly leverage unlock game-changer
+revolutionary cutting-edge firstly moreover furthermore additionally consequently nonetheless notably
+essentially subsequently arguably ultimately`.split(/\s+/);
+
+const BANNED_PHRASES = ["in today's world", 'in today’s world', 'at the end of the day', 'needless to say',
+ "it's worth noting", 'it’s worth noting', 'it is worth noting', 'that being said', 'it is advisable',
+ 'when it comes to', 'in conclusion', 'in order to', 'not only'];
+
+// Owner's rule (2026-10-03): every article has a banner and at least four
+// figures (diagrams or charts), drawn with blog-pipeline/visuals.
+const FIGURES_MIN = 4;
+const WORDS_MIN = 1200;
+const WORDS_MAX = 2000;
+const LONG_SENTENCE = 35;
+
+/** Body text a reader sees as prose: no fenced code, inline code or link targets. */
+function prose(body) {
+ return body
+ .replace(/^(```|~~~)[\s\S]*?^\1\s*$/gm, ' ')
+ .replace(/`[^`\n]*`/g, ' ')
+ .replace(/\]\([^)]*\)/g, ']');
+}
+
+function lineOf(text, index) {
+ return text.slice(0, index).split('\n').length;
+}
+
+function sentences(text) {
+ return text
+ .replace(/^#{1,6}\s.*$/gm, '')
+ .replace(/^\s*([-*+]|\d+\.)\s+/gm, '')
+ .replace(/^\|.*\|$/gm, '')
+ .split(/(?<=[.!?])\s+/)
+ .map((s) => s.replace(/\s+/g, ' ').trim())
+ .filter((s) => /[a-z]/i.test(s));
+}
+
+export function checkArticle(filePath, source) {
+ const errors = [];
+ const warnings = [];
+ const fileName = path.basename(filePath);
+
+ let post = null;
+ try {
+ post = toDialogPost(fileName, source);
+ } catch (err) {
+ errors.push(err.message.replace(/^content\/blog\/[^:]+: /, 'Frontmatter: '));
+ }
+
+ let data = {};
+ let body = source;
+ try {
+ ({ data, body } = parseFrontmatter(source));
+ } catch {
+ // Already reported above.
+ }
+ const text = prose(body);
+ const visible = [data.title, data.description, data.excerpt, text].filter(Boolean).join('\n');
+
+ // Punctuation.
+ const dashes = [...visible.matchAll(/—/g)].length;
+ if (dashes) errors.push(`${dashes} em dash(es). Use a colon, period, comma or "and".`);
+ const semis = [...text.replace(/TL;DR/g, '').matchAll(/;/g)].map((m) => lineOf(text, m.index));
+ if (semis.length) errors.push(`${semis.length} semicolon(s) in prose, body lines ${semis.join(', ')}.`);
+
+ // Vocabulary and brand.
+ const lower = visible.toLowerCase();
+ const words = BANNED_WORDS.filter((w) => new RegExp(`(^|[^a-z-])${w}($|[^a-z-])`, 'i').test(visible));
+ const phrases = BANNED_PHRASES.filter((p) => lower.includes(p));
+ if (words.length || phrases.length) errors.push(`Banned vocabulary: ${[...words, ...phrases].join(', ')}.`);
+ // Brand (rebrand of 2026-10-20): the product is LLMiser. "formerly MDify" is
+ // the only accepted mention of the old name.
+ const oldName = (source.replace(/formerly MDify/gi, '').match(/\b(MDify|MarkDify)\b/gi) || []).length;
+ if (oldName) errors.push(`Brand: ${oldName} mention(s) of the old name. Write "LLMiser".`);
+ if (/\bLLMIser\b|\bLlmiser\b|\bLLMISER\b/.test(visible)) errors.push('Brand: write "LLMiser" (LLM capitalized, "iser" lower case).');
+ if (/mdify-app\.vercel\.app|mdify\.devbehindyou\.com|markdify\./i.test(source)) errors.push('Links point to an old MDify host. Use relative links or https://llmiser.devbehindyou.com.');
+ // Owner's rule (2026-09-28): articles describe what the app does, never the
+ // engines or hosting behind it. Only the Terms and Privacy Policy credit them.
+ const engines = ['MarkItDown', 'Tesseract', 'Supabase', 'Render.com', 'onrender'].filter((n) => new RegExp(n.replace('.', '\\.'), 'i').test(source));
+ if (engines.length) errors.push(`Don't name the engines or hosting behind LLMiser: ${engines.join(', ')}.`);
+ // Capability boundaries (docs/ai-handover/HANDOVER.md): never attribute these to LLMiser.
+ if (/LLMiser[^.\n]{0,80}\b(routes? (your )?(requests|models)|caches? (your )?prompts|cuts your bill|browser extension|Chrome extension)/i.test(text)) {
+ errors.push('Capability: LLMiser prepares documents. It does not route models, cache prompts, cut bills automatically or ship a browser extension.');
+ }
+ // Claims policy (research 15_LEGAL_AND_CLAIMS): no promise percentages in titles.
+ if (/\d+\s*(%|x\b)/i.test(String(data.title || ''))) warnings.push('Title promises a percentage or multiplier. State it as a measured example in the body instead.');
+
+ // Visuals.
+ if (post) {
+ if (!post.banner) errors.push('Missing "banner" (build it with visuals/build.mjs, then set banner and bannerAlt).');
+ if (post.figures.length < FIGURES_MIN) errors.push(`${post.figures.length} figure(s). Every article needs at least ${FIGURES_MIN}, besides the banner.`);
+ const { errors: missing } = collectVisuals(post);
+ errors.push(...missing.map((e) => e.replace(/^content\/blog\/[^:]+: /, 'Visual: ')));
+ const imageLines = body.replace(/^(```|~~~)[\s\S]*?^\1\s*$/gm, ' ').split('\n').filter((l) => /!\[[^\]]*\]\(/.test(l)).length;
+ const stray = imageLines - post.figures.length;
+ if (stray > 0) errors.push(`${stray} image line(s) the dialog can't show. Put each figure on its own line as .`);
+ }
+
+ // Structure.
+ if (!/^## Frequently Asked Questions\s*$/m.test(body)) errors.push('Missing "## Frequently Asked Questions" section.');
+ const faqStart = body.search(/^## Frequently Asked Questions\s*$/m);
+ if (faqStart !== -1) {
+ const faqs = body.slice(faqStart).split(/^## /m)[1] || '';
+ const count = (faqs.match(/^### /gm) || []).length;
+ if (count < 5 || count > 6) warnings.push(`${count} FAQ question(s). Aim for 5 or 6.`);
+ }
+ if (!/\]\(\/\)/.test(body)) warnings.push('No link to the converter "(/)".');
+ if (!/\]\(\/usecase\)/.test(body)) warnings.push('No link to "(/usecase)".');
+
+ // Length and rhythm.
+ const count = wordCount(body);
+ if (count < WORDS_MIN || count > WORDS_MAX) warnings.push(`${count} words. Target ${WORDS_MIN} to ${WORDS_MAX}.`);
+ const list = sentences(text.replace(/^\s*!\[.*$/gm, ""));
+ const long = list.filter((s) => s.split(' ').length > LONG_SENTENCE);
+ if (long.length) warnings.push(`${long.length} sentence(s) over ${LONG_SENTENCE} words, e.g. "${long[0].slice(0, 80)}..."`);
+ const lengths = list.map((s) => s.split(' ').length);
+ for (let i = 2; i < lengths.length; i += 1) {
+ const window = lengths.slice(i - 2, i + 1);
+ if (Math.max(...window) - Math.min(...window) <= 2) {
+ warnings.push(`Three sentences in a row of similar length, starting "${list[i - 2].slice(0, 60)}..."`);
+ break;
+ }
+ }
+
+ // Metadata.
+ if (typeof data.title === 'string' && data.title.length > 60) warnings.push(`Title is ${data.title.length} characters. Aim for 60 or fewer.`);
+ if (data.primaryKeyword && data.description && !data.description.toLowerCase().includes(String(data.primaryKeyword).toLowerCase())) {
+ warnings.push('Description does not contain the primary keyword.');
+ }
+ if (data.author && data.author !== 'DevBehindYou') warnings.push(`Author is "${data.author}". Use a real, named person or DevBehindYou.`);
+ if (data.draft === true) warnings.push('draft: true. The post stays out of the Blog dialog until you set it to false.');
+
+ return { post, errors, warnings, words: count };
+}
+
+function report(filePath, result) {
+ const lines = [
+ `LLMiser article check: ${filePath}`,
+ `Date: ${new Date().toISOString()}`,
+ `Words: ${result.words}${result.post ? `, read time ${result.post.readTime}` : ''}`,
+ '',
+ `Errors (${result.errors.length}):`,
+ ...(result.errors.length ? result.errors.map((e) => ` x ${e}`) : [' none']),
+ '',
+ `Warnings (${result.warnings.length}):`,
+ ...(result.warnings.length ? result.warnings.map((w) => ` ! ${w}`) : [' none']),
+ '',
+ result.errors.length ? 'RESULT: FAIL. Fix every error, then run the check again.' : 'RESULT: PASS',
+ ];
+ return `${lines.join('\n')}\n`;
+}
+
+function main(argv) {
+ const target = argv.find((arg) => !arg.startsWith('--'));
+ if (!target) {
+ console.error('Usage: node blog-pipeline/check.mjs frontend/content/blog/{slug}.md [--no-report]');
+ return 2;
+ }
+ if (!fs.existsSync(target)) {
+ console.error(`File not found: ${target}`);
+ return 2;
+ }
+ const result = checkArticle(target, fs.readFileSync(target, 'utf8'));
+ const text = report(target, result);
+ process.stdout.write(text);
+ if (!argv.includes('--no-report')) {
+ const out = path.join(PIPELINE_DIR, 'Outputs', `${path.basename(target, '.md')}.check.txt`);
+ fs.writeFileSync(out, text);
+ console.log(`Saved ${path.relative(process.cwd(), out)}`);
+ }
+ return result.errors.length ? 1 : 0;
+}
+
+if (process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(import.meta.url)) {
+ process.exitCode = main(process.argv.slice(2));
+}
diff --git a/blog-pipeline/handover/CLAUDE_CODE_FULL_CAMPAIGN_PROMPT.md b/blog-pipeline/handover/CLAUDE_CODE_FULL_CAMPAIGN_PROMPT.md
new file mode 100644
index 0000000..02039e7
--- /dev/null
+++ b/blog-pipeline/handover/CLAUDE_CODE_FULL_CAMPAIGN_PROMPT.md
@@ -0,0 +1,6427 @@
+# Claude Code master prompt: LLMiser editorial campaign
+
+Prepared 7 November 2026 from the selected campaign records. Copy this file into Claude Code, or ask Claude Code to read it from disk and carry out the assignment.
+
+## Navigation and context management
+
+This is a complete assignment pack, not a file to regenerate. Read Sections 1–10 once, then load the current article's assignment and relevant sources in focused batches. Use the saved checkpoint to resume across context limits. Do not treat earlier finished work as missing merely because it is outside the current context.
+
+- [Main-article assignments](#12-main-article-assignments)
+- [Support-article assignments](#13-support-article-assignments)
+- [All 108 post assignments](#14-individual-supporting-post-assignments)
+- [Overlap decisions](#15-shared-overlap-decisions)
+- [Starting source library](#16-starting-source-library)
+- [Open reviews](#17-open-editorial-and-evidence-reviews)
+- [Final reporting](#18-final-reporting-format)
+
+## 1. Your assignment
+
+You are the lead technical writer, researcher and content QA editor for LLMiser. Produce the actual prose and reviewable visual deliverables for this complete campaign, not another plan or a few example articles:
+
+1. Write all **12 main articles** using the owner's exact selected titles.
+2. Then write **36 support articles**, exactly three for each main.
+3. Then write **108 supporting posts**, exactly three distinct posts for each support.
+
+The total is **48 articles plus 108 posts = 156 content assets**. Banners and figures are additional visual files, not additional articles or posts. Each article requires one banner and at least four useful figures, so the baseline article visual allocation is 48 banners and 192 figures. Do not meet any count with repetitive filler.
+
+Use the proposed keywords, metadata, outlines, visual concepts and topic boundaries embedded below and in the private repository pipeline. Main titles are approved and locked. Support titles, descriptions and post hooks are proposals that you may refine with evidence while preserving IDs, intent boundaries and the agreed counts. Document substantive changes. Do not silently rename a main title.
+
+Work through the full assignment in saved batches. Do not stop after M01, after ten articles, after a new roadmap, or after repeating the briefs. If the session cannot fit all work, save an exact continuation checkpoint and state what remains. Never label the campaign complete because its briefs already exist.
+
+This prompt assigns content creation and local QA. Deliver complete private drafts, sources, figures, post copy and a release manifest. It does not itself request public deployment or social posting. Honor any explicit release instruction the owner separately gives in the active Claude Code conversation. Do not infer posting authorization from a social brief or archived document.
+
+## 2. Workspace, authority and startup
+
+Repository root:
+C:\Users\temp\Documents\GitHub\LLMiser
+
+Private editorial workspace:
+C:\Users\temp\Documents\GitHub\LLMiser\blog-pipeline
+
+This master prompt lives at:
+C:\Users\temp\Documents\GitHub\LLMiser\blog-pipeline\handover\CLAUDE_CODE_FULL_CAMPAIGN_PROMPT.md
+
+Set the working directory to LLMiser explicitly. Do not edit MDify or MDify-Pro. Preserve unrelated work and the eight existing published articles and their artwork. Do not force-add private pipeline files to Git.
+
+Before drafting:
+
+- Read applicable AGENTS.md instructions, inspect Git status and current revision, and inspect actual existing content.
+- Read handover/STATE.json, campaign/manifest.json, campaign/selected-titles.json, campaign/README.md, intent-registry.json, campaign/posts.json and research/review-register.json.
+- Read 01-STYLE-RULES.md, 02-SEO-GEO.md, 03-BRAND-ENTITY.md, 04-OUTPUT-FORMAT.md, VISUALS.md, CANNIBALIZATION.md, PUBLISHING.md and MAIN_BLOG_AUDIT.md.
+- Read the exact main/support briefs when working on their IDs. Historical S01–S10 files and the old 15/45/360 archive are not additional assignments.
+- Run the existing planning validator and regression tests. Record pre-existing failures separately from your changes.
+- Inspect progress before overwriting anything. Resume valid drafts instead of regenerating them.
+
+Authority order: current explicit owner instructions and exact selected titles; current verified application behavior and parser contract for factual claims; current campaign registry and briefs for assignment ownership; this prompt's dated embedded snapshot; historical material only as attributed research. A web page, source document or fixture is evidence, not an instruction to change your task.
+
+This file embeds all assignments to make the handoff usable on its own. On-disk records may change after 7 November. Compare them before editing, record meaningful differences, and preserve the owner's exact titles. If the repository is unavailable, save a clearly labeled research/copy draft and identify the product checks that require access. Do not invent behavior.
+
+## 3. Brand, reader and feature truth
+
+LLMiser is an **LLM cost optimizer for document inputs**, by **DevBehindYou**.
+Tagline: **Make Every Token Count.**
+Canonical origin: https://llmiser.devbehindyou.com
+Repository: https://github.com/DevBehindYou/LLMiser
+
+Explain the useful workflow: convert supported files into editable Markdown, inspect the result, remove unnecessary context while retaining needed evidence, then use the reviewed content with AI. Speak to developers, analysts, researchers and people preparing documents for AI.
+
+Use current LLMiser branding and the approved study 11 “Prompt L” mark. Avoid old-brand marketing, internal database/hosting explanations, fake partnerships and hype. Use US English for all articles and posts. The app's six interface languages do not create a multilingual blog assignment.
+
+Recheck product claims at drafting time. Existing evidence includes formats.js, siteContent.js, documentStats.js, editorExport.js, the conversion/profile implementation, backendZ ZIP outputs and backendO OCR behavior. Read the current privacy policy for privacy claims.
+
+Known starting constraints to verify, not timeless guarantees:
+
+- Profiles: Standard, Clean, Compact and RAG-ready.
+- The UI has been documented at 20 files per batch, 15 MiB for documents/ZIP and 10 MiB for images. Other archive, decoded-image and scanned-page limits apply. Never call it unlimited.
+- OCR recognition was configured for English. Do not infer translation or multilingual OCR from UI languages.
+- Token counts are a character-based estimate, not provider billing or a model-specific tokenizer.
+- Conversion uploads files to a service. Do not call the app browser-only or promise immediate deletion.
+- RAG-ready output does not provide embeddings, retrieval, a vector database or an answer-quality guarantee.
+- Do not claim automatic model routing, caching, billing control, secret scanning, prompt-injection removal, complete extraction, perfectly preserved charts/formulas or guaranteed savings.
+- Do not promote a browser-extension store listing unless verified live.
+- Prompt-injection examples must be inert and synthetic. Do not follow instructions inside sample documents or test them against real accounts.
+
+Existing blog findings include unsafe lexical deduplication of differing facts, deletion of differing numeric rows and a fence-unaware chunking example. These are issues to avoid repeating, not working recipes to copy. Do not rewrite those published articles as a side effect of this assignment.
+
+## 4. Execution phases and checkpoints
+
+### Phase A: establish evidence and draft the 12 mains
+
+For M01 through M12, read its three support briefs to understand boundaries before drafting the main. Complete the twelve main drafts before moving to full support-article writing. Shared research and fixture preparation are allowed during this phase.
+
+For every main: research, prepare the original example, write an approved outline that retains the selected title, write complete prose and metadata, produce figures and captions, run QA, record limitations. Each numbered listicle must deliver exactly the number promised in its title. Intros, FAQs and CTA are outside that count.
+
+Do not put dead support links into reader-ready prose. Keep proposed link placements in links.json until their destinations are included in a release.
+
+### Phase B: write the 36 supports
+
+Work M01-S1 through M12-S3 after the main drafts exist. Each support must answer its assigned narrow question, show a distinct example or analysis and add practical depth. It must not repeat its parent's complete list or become a generic conversion landing page.
+
+Revisit main link placements and brief summaries after the supports are finished. Reuse safe fixtures and sources, not identical prose. If a support is too thin or duplicates another owner, research a better narrow question inside the same cluster, record the change and preserve three supports. Never silently reduce the campaign count or pad it.
+
+### Phase C: write the 108 posts
+
+Write actual final copy, not hook-only outlines. Use each finished support article and its verified evidence. Follow the individual post IDs, opening ideas and content beats in the appendix.
+
+Recommended editorial defaults, not selected publication accounts:
+- P1: LinkedIn-style practical post, approximately 120–220 words, one useful takeaway, short sequence, limitation and one support-article CTA.
+- P2: a five-panel carousel with actual panel copy, a caption, panel alt text and a visual spec. Suggested structure: problem, source example, inspection, finding, action/limitation. Keep a clear single idea on each panel.
+- P3: a short misconception/limitation post. Supply a single-message version and, only if needed, a concise thread form in the same post file. These are variants of one post ID, not additional assets.
+
+These are editorial length targets, not claims about current platform limits. Verify the destination's current constraints before calling any export platform-ready. If the owner later chooses other channels, adapt the existing IDs rather than multiplying the 108 count. Never select an account, schedule or publish on the owner's behalf without explicit instruction.
+
+### Phase D: cross-campaign QA and delivery
+
+Check all 48 articles together for repeated passages, competing intent, contradictory feature descriptions, unsupported claims and broken links. Check all 108 posts against the final support copy. Complete the release manifest, production tracker, checks and handover. Report actual counts and unresolved evidence, not a blanket “done” claim.
+
+After each completed article and each three-post set, save status. At the end of every batch update a concise checkpoint with completed IDs, paths, tests, next ID and blockers. Avoid making the owner repeatedly restate the assignment.
+
+## 5. Research, keywords and evidence
+
+Treat every proposed primary keyword as a hypothesis about the reader's task. Newly planned volume and difficulty values are unmeasured. Do not invent “high search volume,” ranking, impressions, CPC or traffic.
+
+For each article:
+
+1. Search its primary question, useful variants and the nearest competing owner intents.
+2. Use Google, Bing, Brave and DuckDuckGo where directly accessible. Record engine, query, date, locale/device if known, actual result URLs and observed intent. If a tool uses an unspecified provider, label it accurately instead of calling it a Google audit.
+3. Use Semrush, Ahrefs and Google Keyword Planner only with legitimate available access or a supplied export. These are SEO/advertising research tools, not AI search engines. Record date, market, metric definition and source. Mark unavailable data as unavailable.
+4. If inspecting AI answers, record product, exact query, date and cited pages. A citation in one answer is not a guarantee of visibility.
+5. Prefer primary sources and current product/code evidence. Competitor pages can reveal search positioning but cannot prove LLMiser capabilities.
+6. Maintain a claim ledger linking important claims to a source passage or a reproducible test, including limitations.
+7. Save observations separately from conclusions. Different titles or exact keywords alone do not demonstrate independent search intent.
+
+Secondary keywords: choose up to four natural variants for each article, after reviewing the ownership registry. Do not steal another page's primary query as your article's central purpose. Missing volume is unknown, not zero. Avoid invented keyword-density targets.
+
+For actual demonstrations, use original synthetic files with no private data. Record fixture hashes, profile, app/repo revision, test date, steps, expected behavior, observed output and omissions. Keep originals and outputs. A local illustration is not a live-conversion test. Label unrun examples as illustrative and keep their verification gate open.
+
+No ranking, AI citation, cost-saving or zero-cannibalization guarantee. Reduce overlap through distinct tasks, original examples and editorial review, then observe actual query-to-page data if access becomes available.
+
+## 6. Writing and metadata contract
+
+Target 1,200–2,000 useful words per article under the current editorial rules. Do not pad an inherently narrow support with unrelated sections. Strengthen its original example or revise its proposed scope with evidence.
+
+- Start the body with **TL;DR:** followed by a clear two- or three-sentence answer.
+- Intro under 120 words. State the angle immediately.
+- H1 comes from the title. Body uses H2/H3.
+- Open each H2 with a direct answer of roughly 25–40 words, then details.
+- Use short paragraphs, active voice, contractions and concrete steps.
+- Bold the primary/secondary phrase on its first natural use only.
+- No em dashes or semicolons in prose, apart from the TL;DR label. Code syntax is exempt.
+- Follow the repository's banned-vocabulary checks. Avoid generic AI prose, repetitive transitions and promotional filler.
+- Use five or six useful FAQ questions and a one-line contextual CTA. Do not invent questions only to repeat the article.
+- Cite statistics and factual claims near the statement. Label illustrative examples and distinguish estimates from measurements.
+- Byline is DevBehindYou unless an actual contributor is explicitly identified.
+- Do not copy source wording or fabricate quotes, users, testimonials or test outcomes.
+
+Use the real parser-supported fields below. Fill every placeholder in actual drafts:
+
+~~~yaml
+---
+title: "Exact selected main title or reviewed support title"
+slug: "reserved-slug"
+description: "Proposed description, refined if necessary, at most 170 characters."
+excerpt: "Useful reader-facing summary."
+date: "YYYY-MM-DD"
+author: "DevBehindYou"
+category: "GUIDE"
+tags: ["Document conversion", "Markdown", "AI context"]
+primaryKeyword: "Owned primary keyword"
+secondaryKeywords: ["Researched relevant variant"]
+banner: "/blog/reserved-slug/banner.svg"
+bannerAlt: "Description of the actual banner."
+featured: false
+draft: true
+---
+~~~
+
+Use 3–6 relevant tags, at most four secondary keywords, scalar values/flow arrays accepted by the parser, and a slug matching the reserved filename. Use a real drafting date while private and draft:true. Record it as a draft date in production metadata. Set the actual publication date at release. Do not invent future or historical publication dates. Optional updated is only for real material revisions.
+
+Do not add unsupported seoTitle, canonical, ogImage or faqSchema fields and assume they work. The app derives metadata and currently uses a shared social card. Visual exports do not automatically replace that card.
+
+## 7. Visual production
+
+Inspect visuals/kit.mjs, current article visual specs and runtime brand tokens before drawing. Use the approved Prompt L identity, not a regenerated logo. Starting palette: dark #08080a, text #f2f2f6, amber #f59e0b, light #f0eee9, dark ink #18181b and Prompt L periwinkle #a0a0ff. Current kit/runtime values take precedence. Fonts: Inter, Patrick Hand for editorial hooks and JetBrains Mono for labels/code, subject to current files.
+
+For every article:
+- One 1200 × 400 SVG banner using the kit.
+- At least four informative figures: a process, example comparison, decision and checklist where suited.
+- Accessible alt text, captions and a visual source ledger.
+- Labels and shapes in addition to color. Readable source labels and short figure titles.
+- Actual rendered inspection in dark/light and at 375px width. Record screenshots and fixes. File existence is not visual QA.
+
+Prefer the established SVG kit for diagrams. Do not invent bar lengths, measured-looking charts, success screenshots or model savings. Mark illustrations as illustrations. Use sanitized actual UI screenshots only when obtained and verified.
+
+The current visuals/build.mjs writes into frontend/public/blog/{slug} and deletes stale SVGs in that slug. This writing assignment should stage new SVGs privately in Blogs/{slug}/visuals/. Use a small private renderer that imports the new spec, validates SVGs with inspectSvg and writes only that private output directory, or use an isolated preview workspace with approved output roots. Do not run --all. Do not change the shared builder merely to complete a writing task.
+
+Social artwork must correspond to actual post copy. Suggested canvases in VISUALS.md are starting sizes, not verified platform limits. Save platform-ready exports only after checking the target and rendered output. Keep post visuals and alternative formats grouped under their one post ID.
+
+## 8. Output files and status contract
+
+All paths below are relative to blog-pipeline. For each of the 48 article slugs, create:
+
+~~~text
+Blogs/{slug}/
+ research.md # actual query/source findings, dates and access limits
+ sources.md # source ledger, claim IDs and checked passages
+ metadata.json # parser fields, canonical reservation, reader task
+ outline.md # final section structure and scope exclusions
+ draft.md # complete article with valid draft frontmatter
+ claims.json # claim-to-source/test mapping and verification state
+ links.json # intended links, owner IDs and release availability
+ fixtures/ # synthetic inputs, hashes, observed outputs if tested
+ visuals.mjs # established kit-based spec
+ visuals/ # banner and >=4 reviewed figure SVGs
+ visual-ledger.md # alt text, captions, source, renderer QA
+ qa.md # actual commands/results and editorial findings
+~~~
+
+For each of the 36 support slugs, create:
+
+~~~text
+Posts/{support-slug}/
+ {support-id}-P1.md
+ {support-id}-P2.md
+ {support-id}-P3.md
+ visuals/ # files grouped/named by the three post IDs
+ qa.md
+~~~
+
+Each post file contains: ID, parent/support URL, intended channel (editorial default unless chosen), format, final publishable copy, CTA, source/claim references, actual character/word count, alt text, visual file/spec references, limitation, and DRAFT_NOT_POSTED status. P2 includes the exact panel copy and caption. Keep editorial notes separate from the copy to paste.
+
+Use a private campaign/production-status.json ledger for richer statuses such as NOT_STARTED, RESEARCHING, DRAFTED, QA_PENDING, READY_FOR_REVIEW and BLOCKED_EVIDENCE. Keep writing, fixture testing, visual QA, publication and indexing as separate fields.
+
+Do not insert new status names into intent-registry.json that its validator does not support. PROPOSED remains appropriate for unpublished work unless the documented status contract is updated deliberately. A completed draft does not mean published, indexed or verified live. Update the manifest's draft counts only when drafts actually exist. Leave published counts at zero until a real authorized release.
+
+Also maintain:
+- campaign/editorial-tracker.csv: one row per existing assigned ID, 156 total.
+- campaign/posts.json and readable post briefs if an assignment changes.
+- campaign/CONTINUATION.md: exact checkpoint and next action.
+- campaign/RELEASE_MANIFEST.md: all final paths, hashes, readiness, unresolved gates.
+- handover/STATE.json: actual progress and completion scope.
+
+Private evidence stays private. Do not force-add ignored files or publish fixture data. Do not delete or reassign IDs to conceal unfinished work.
+
+## 9. Quality checks and completion criteria
+
+From the LLMiser repository root:
+
+~~~powershell
+node blog-pipeline/scripts/validate-plan.mjs --preservation
+node --test blog-pipeline/scripts/validate-plan.test.mjs
+~~~
+
+The existing preservation baseline protects current public articles/assets. Keep it unchanged during this private writing assignment. If the repository has legitimately changed since it was recorded, report and reconcile dated evidence rather than silently replacing hashes.
+
+Inspect check.mjs before using it for private drafts. It validates the app's public asset paths. A raw private-draft check may fail because staged figures are not under frontend/public. Use an isolated preview workspace or a narrowly scoped private QA adapter that resolves staged assets while keeping the same parser, SVG safety and prose rules. Record the distinction. Do not disable checks or claim production validation based only on a private adapter.
+
+When an actual public release is separately assigned, run the repository's documented article checker, blog:index, blog:check, relevant blog/SEO tests, lint and production build, then inspect rendered routes/metadata/sitemap. These are release gates, not evidence that private writing has already deployed.
+
+Campaign completion requires:
+
+- Exactly 12 complete main drafts with exact selected titles and promised listicle counts.
+- Exactly 36 complete support drafts, each with a distinct narrow question and one correct main.
+- Exactly 108 complete post-copy files, one for every assigned ID.
+- All 48 metadata records aligned with canonical reservations and reader intent.
+- All article banners and figures produced, cited/labeled and actually visually inspected.
+- Every important factual claim supported or appropriately qualified.
+- No invented search metrics, test outcomes or feature claims.
+- No repeated generic passages replacing article-specific work.
+- Internal link plan has no accidental public links to unavailable destinations.
+- All validators, editorial reviews and limitations recorded honestly.
+- Completed/blocked work clearly separated in the tracker and handover.
+
+If an evidence or rendering tool is unavailable, finish independent writing work and mark the dependent item pending. Ask a concise question only when the answer is necessary. Never manufacture success to satisfy this checklist.
+
+## 10. Start now
+
+Read the startup files, verify the existing state, then begin M01. Proceed through all twelve main drafts, all thirty-six supports and all one-hundred-eight posts. The sections below contain the exact assignments, metadata reservations, source library and boundaries. They are working inputs, not finished article prose.
+
+## 11. Existing owners to preserve
+
+These pages already own the following tasks. They are context, not new writing assignments.
+
+| ID | Existing page | Primary ownership | Reader task |
+| --- | --- | --- | --- |
+| HOME | [HOME](https://llmiser.devbehindyou.com) | LLM cost optimizer | Use the live document converter |
+| USE | [USE](https://llmiser.devbehindyou.com/usecase) | why use LLMiser | Understand product benefits and limitations |
+| E01 | [How to Reduce LLM API Costs Without Losing Quality](https://llmiser.devbehindyou.com/blog/reduce-llm-api-costs) | reduce LLM API costs | Reduce provider API spend through actionable techniques |
+| E02 | [Why Your LLM Bill Is Too High, and Where the Waste Hides](https://llmiser.devbehindyou.com/blog/why-your-llm-bill-is-too-high) | LLM API cost | Diagnose why an API bill is unexpectedly high |
+| E03 | [Why Your LLM Token Usage Is So High, and How to Fix It](https://llmiser.devbehindyou.com/blog/reduce-llm-token-usage) | LLM token usage | Audit excess input history and output tokens |
+| E04 | [The Real Cost of RAG: Embeddings, Tokens and Re-Ranking](https://llmiser.devbehindyou.com/blog/rag-cost-optimization) | RAG cost | Understand full-lifecycle RAG costs |
+| E05 | [The Hidden Token Tax in RAG Pipelines](https://llmiser.devbehindyou.com/blog/hidden-token-tax-rag-pipelines) | RAG token optimization | Tune retrieved context waste overlap and top-K |
+| E06 | [PDFs Are Expensive for AI: Here's Why](https://llmiser.devbehindyou.com/blog/why-pdfs-are-expensive-for-ai) | PDF LLM tokens | Explain how PDF ingestion paths affect tokens |
+| E07 | [Markdown vs Raw PDFs: Which Uses Fewer LLM Tokens?](https://llmiser.devbehindyou.com/blog/markdown-vs-pdf-llm-tokens) | Markdown vs PDF for LLM | Compare PDF and Markdown input representations conditionally |
+| E08 | [Stop Sending Whole Documents to AI: Build a Better Pipeline](https://llmiser.devbehindyou.com/blog/document-to-llm-pipeline) | document to LLM pipeline | Understand the end-to-end document ingestion pipeline |
+
+## 12. Main-article assignments
+
+Write these twelve main drafts first. Main titles are locked. Descriptions may be refined within the parser limit. Keep primary intent ownership intact. Research secondary keywords rather than inventing demand.
+
+### Main assignment M01: 7 Things to Remove Before Sharing a Codebase With AI
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M01",
+ "title": "7 Things to Remove Before Sharing a Codebase With AI",
+ "canonical": "https://llmiser.devbehindyou.com/blog/prepare-codebase-for-ai",
+ "primary_keyword": "prepare codebase for AI",
+ "description": "Prepare a codebase for AI review by removing unnecessary or sensitive files while keeping the source, tests and dependency context the task needs.",
+ "intent_key": "prepare-codebase-for-ai",
+ "intent": "Keep task-relevant source, tests and dependency manifests. Removal is a reviewed choice, not automatic sanitization.",
+ "excludes": "Keep task-relevant source, tests and dependency manifests. Removal is a reviewed choice, not automatic sanitization.",
+ "parent_id": "E08",
+ "nearest_ids": [
+ "M10",
+ "E08"
+ ],
+ "source_refs": [
+ "SRC-GIT",
+ "SRC-LOCAL"
+ ]
+}
+~~~
+
+Title: USER_SELECTED on 5 November 2026. Article: PROPOSED, not written or published.
+
+Metadata owner: [intent-registry.json](), record `M01`. Preserve the selected title exactly. Category: listicle. Parent context: E08.
+
+#### Reader task and limits
+
+Keep task-relevant source, tests and dependency manifests. Removal is a reviewed choice, not automatic sanitization.
+
+Nearest owners: M10, E08. Explain the overview here, then send detailed troubleshooting to the three supports. Avoid reproducing their full procedures.
+
+#### Outline
+
+1. Secrets and local credentials
+2. Private data and identifying logs
+3. Installed dependency directories
+4. Generated build output
+5. Caches and temporary files
+6. Irrelevant large binaries
+7. Duplicate or obsolete copies
+
+The title promises 7 items. Keep that count in the core numbered sections; introduction, FAQ and CTA are outside the count.
+
+#### Three supporting articles
+
+- [M01-S1: Check a Project ZIP for Secrets Before Sharing It]() — How do I review a sharing copy for credentials and private data?
+- [M01-S2: Which Dependency Files Should You Keep for AI Review?]() — What should remain when installed packages are removed?
+- [M01-S3: Build a Task-Focused Code Bundle With Tests]() — How do I select enough source and tests for one code question?
+
+#### Evidence and source plan
+
+Source IDs: SRC-GIT, SRC-LOCAL. Resolve them in [sources.json](). Product-specific behavior requires the current app/code and an original sample, not a competitor feature list. Reuse the supports’ tested fixtures to avoid inventing separate demonstrations.
+
+- M01-S1: Toy repo with clearly fake keys, a synthetic log and harmless config. Compare the original and sharing inventory.
+- M01-S2: Toy project with package manifest, lockfile, vendor folder and import requiring version context.
+- M01-S3: Toy bug spanning a caller, helper and test; compare a minimal sufficient bundle with an incomplete one.
+
+#### Visual plan
+
+Banner: illustrate this selected task with the current Prompt L identity, not a savings claim.
+
+1. An overview of the main workflow or numbered checks.
+2. A source-to-output comparison using the cluster fixture.
+3. A decision chart around the cluster’s scope boundary.
+4. A final inspection checklist with labels and a limitation.
+
+Each figure must use specific content from the draft. Review dark/light and narrow layout; four figures is not permission for decorative padding.
+
+#### Linking and CTA
+
+Link to E08 only for relevant broader context; use short handoffs to the three supports. Do not link to unpublished URLs until included in a release. One contextual converter CTA is enough. For M11/M12, explain that LLMiser prepares text and does not enforce trust or document precedence.
+
+### Main assignment M02: 9 OCR Checks Before You Send Scanned Text to AI
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M02",
+ "title": "9 OCR Checks Before You Send Scanned Text to AI",
+ "canonical": "https://llmiser.devbehindyou.com/blog/ocr-checks-before-ai",
+ "primary_keyword": "OCR quality checks for AI",
+ "description": "Check OCR output before using scanned text with AI. Review page coverage, numbers, reading order and tables against the original document.",
+ "intent_key": "ocr-checks-before-ai",
+ "intent": "A quality checklist, not a second PDF-cost article or a guarantee of accurate recognition.",
+ "excludes": "A quality checklist, not a second PDF-cost article or a guarantee of accurate recognition.",
+ "parent_id": "E08",
+ "nearest_ids": [
+ "E06",
+ "E07",
+ "E08"
+ ],
+ "source_refs": [
+ "SRC-LOCAL",
+ "SRC-OCR-RESEARCH"
+ ]
+}
+~~~
+
+Title: USER_SELECTED on 5 November 2026. Article: PROPOSED, not written or published.
+
+Metadata owner: [intent-registry.json](), record `M02`. Preserve the selected title exactly. Category: listicle. Parent context: E08.
+
+#### Reader task and limits
+
+A quality checklist, not a second PDF-cost article or a guarantee of accurate recognition.
+
+Nearest owners: E06, E07, E08. Explain the overview here, then send detailed troubleshooting to the three supports. Avoid reproducing their full procedures.
+
+#### Outline
+
+1. Text is actually present
+2. Page coverage and order
+3. Rotation and orientation
+4. Small or blurred text
+5. Numbers and decimal marks
+6. Dates and identifiers
+7. Columns and reading order
+8. Table labels and values
+9. Manual comparison with the original
+
+The title promises 9 items. Keep that count in the core numbered sections; introduction, FAQ and CTA are outside the count.
+
+#### Three supporting articles
+
+- [M02-S1: Check Rotated Scans Before Running OCR]() — How does orientation affect recognition in a specific sample?
+- [M02-S2: Verify Numbers and Identifiers in OCR Output]() — How do I verify digits and labels without trusting fluent OCR text?
+- [M02-S3: Check OCR Coverage in a Mixed PDF]() — How do I confirm that a PDF with text and scanned pages is represented?
+
+#### Evidence and source plan
+
+Source IDs: SRC-LOCAL, SRC-OCR-RESEARCH. Resolve them in [sources.json](). Product-specific behavior requires the current app/code and an original sample, not a competitor feature list. Reuse the supports’ tested fixtures to avoid inventing separate demonstrations.
+
+- M02-S1: Synthetic English image at 0 and 90 degrees, plus a carefully rotated copy; save actual outputs.
+- M02-S2: Synthetic invoice with 00123, 10.50, a date and letter O/zero examples.
+- M02-S3: Three-page fixture with native text, image-only text and an intentional blank page.
+
+#### Visual plan
+
+Banner: illustrate this selected task with the current Prompt L identity, not a savings claim.
+
+1. An overview of the main workflow or numbered checks.
+2. A source-to-output comparison using the cluster fixture.
+3. A decision chart around the cluster’s scope boundary.
+4. A final inspection checklist with labels and a limitation.
+
+Each figure must use specific content from the draft. Review dark/light and narrow layout; four figures is not permission for decorative padding.
+
+#### Linking and CTA
+
+Link to E08 only for relevant broader context; use short handoffs to the three supports. Do not link to unpublished URLs until included in a release. One contextual converter CTA is enough. For M11/M12, explain that LLMiser prepares text and does not enforce trust or document precedence.
+
+### Main assignment M03: 7 Excel Details to Check Before Sharing Data With AI
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M03",
+ "title": "7 Excel Details to Check Before Sharing Data With AI",
+ "canonical": "https://llmiser.devbehindyou.com/blog/excel-data-checks-for-ai",
+ "primary_keyword": "prepare Excel data for AI",
+ "description": "Prepare Excel data for AI by checking sheets, headers, identifiers, formula results and missing context before using converted Markdown.",
+ "intent_key": "excel-data-checks-for-ai",
+ "intent": "Own workbook semantics; delimiters and delimited-file encoding belong to M06.",
+ "excludes": "Own workbook semantics; delimiters and delimited-file encoding belong to M06.",
+ "parent_id": "E08",
+ "nearest_ids": [
+ "M06",
+ "E08"
+ ],
+ "source_refs": [
+ "SRC-EXCEL",
+ "SRC-LOCAL"
+ ]
+}
+~~~
+
+Title: USER_SELECTED on 5 November 2026. Article: PROPOSED, not written or published.
+
+Metadata owner: [intent-registry.json](), record `M03`. Preserve the selected title exactly. Category: listicle. Parent context: E08.
+
+#### Reader task and limits
+
+Own workbook semantics; delimiters and delimited-file encoding belong to M06.
+
+Nearest owners: M06, E08. Explain the overview here, then send detailed troubleshooting to the three supports. Avoid reproducing their full procedures.
+
+#### Outline
+
+1. Relevant sheets and their order
+2. Headers and units
+3. Leading zeros and identifiers
+4. Dates and number formats
+5. Formula results and freshness
+6. Merged cells and blank values
+7. Charts and other non-cell context
+
+The title promises 7 items. Keep that count in the core numbered sections; introduction, FAQ and CTA are outside the count.
+
+#### Three supporting articles
+
+- [M03-S1: Keep Leading Zeros When Preparing Excel Data for AI]() — How do I distinguish identifiers from numeric quantities?
+- [M03-S2: Check Excel Formula Results Before Conversion]() — What evidence shows whether formula results are current?
+- [M03-S3: Prepare Merged Excel Headers for Markdown Tables]() — How can I make multi-level spreadsheet labels unambiguous?
+
+#### Evidence and source plan
+
+Source IDs: SRC-EXCEL, SRC-LOCAL. Resolve them in [sources.json](). Product-specific behavior requires the current app/code and an original sample, not a competitor feature list. Reuse the supports’ tested fixtures to avoid inventing separate demonstrations.
+
+- M03-S1: Workbook with text 00123, numeric 123 formatted as 00000 and a long ID.
+- M03-S2: Workbook with formula, known result and a stale/absent cached-value case where reproducible.
+- M03-S3: Small two-level header workbook and manually flattened copy with units retained.
+
+#### Visual plan
+
+Banner: illustrate this selected task with the current Prompt L identity, not a savings claim.
+
+1. An overview of the main workflow or numbered checks.
+2. A source-to-output comparison using the cluster fixture.
+3. A decision chart around the cluster’s scope boundary.
+4. A final inspection checklist with labels and a limitation.
+
+Each figure must use specific content from the draft. Review dark/light and narrow layout; four figures is not permission for decorative padding.
+
+#### Linking and CTA
+
+Link to E08 only for relevant broader context; use short handoffs to the three supports. Do not link to unpublished URLs until included in a release. One contextual converter CTA is enough. For M11/M12, explain that LLMiser prepares text and does not enforce trust or document precedence.
+
+### Main assignment M04: 6 Ways to Prepare Word Documents for AI
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M04",
+ "title": "6 Ways to Prepare Word Documents for AI",
+ "canonical": "https://llmiser.devbehindyou.com/blog/prepare-word-documents-for-ai",
+ "primary_keyword": "prepare Word documents for AI",
+ "description": "Prepare Word documents for AI with clearer headings, lists and tables. Review revisions and inspect the Markdown before sharing it.",
+ "intent_key": "prepare-word-documents-for-ai",
+ "intent": "DOCX source preparation, not legacy .doc support or guaranteed formatting preservation.",
+ "excludes": "DOCX source preparation, not legacy .doc support or guaranteed formatting preservation.",
+ "parent_id": "E08",
+ "nearest_ids": [
+ "E08"
+ ],
+ "source_refs": [
+ "SRC-HEADINGS",
+ "SRC-LOCAL"
+ ]
+}
+~~~
+
+Title: USER_SELECTED on 5 November 2026. Article: PROPOSED, not written or published.
+
+Metadata owner: [intent-registry.json](), record `M04`. Preserve the selected title exactly. Category: listicle. Parent context: E08.
+
+#### Reader task and limits
+
+DOCX source preparation, not legacy .doc support or guaranteed formatting preservation.
+
+Nearest owners: E08. Explain the overview here, then send detailed troubleshooting to the three supports. Avoid reproducing their full procedures.
+
+#### Outline
+
+1. Use actual heading styles
+2. Check nested lists
+3. Simplify table structure
+4. Resolve tracked changes in a sharing copy
+5. Add needed context for images and references
+6. Review the converted Markdown
+
+The title promises 6 items. Keep that count in the core numbered sections; introduction, FAQ and CTA are outside the count.
+
+#### Three supporting articles
+
+- [M04-S1: Use Word Heading Styles Before Markdown Conversion]() — How do semantic styles differ from large bold text?
+- [M04-S2: Check Nested Word Lists in Markdown Output]() — How do I verify parent-child relationships in converted lists?
+- [M04-S3: Prepare Word Revisions and Comments for AI Sharing]() — Which revision view and comments should a shared document represent?
+
+#### Evidence and source plan
+
+Source IDs: SRC-HEADINGS, SRC-LOCAL. Resolve them in [sources.json](). Product-specific behavior requires the current app/code and an original sample, not a competitor feature list. Reuse the supports’ tested fixtures to avoid inventing separate demonstrations.
+
+- M04-S1: DOCX pair with visually similar bold text versus actual heading styles.
+- M04-S2: DOCX with nested numbered and bulleted items, including restarted numbering.
+- M04-S3: Synthetic DOCX containing a harmless tracked replacement and comment; record the chosen revision view.
+
+#### Visual plan
+
+Banner: illustrate this selected task with the current Prompt L identity, not a savings claim.
+
+1. An overview of the main workflow or numbered checks.
+2. A source-to-output comparison using the cluster fixture.
+3. A decision chart around the cluster’s scope boundary.
+4. A final inspection checklist with labels and a limitation.
+
+Each figure must use specific content from the draft. Review dark/light and narrow layout; four figures is not permission for decorative padding.
+
+#### Linking and CTA
+
+Link to E08 only for relevant broader context; use short handoffs to the three supports. Do not link to unpublished URLs until included in a release. One contextual converter CTA is enough. For M11/M12, explain that LLMiser prepares text and does not enforce trust or document precedence.
+
+### Main assignment M05: 8 Checks When Converting PowerPoint to Markdown
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M05",
+ "title": "8 Checks When Converting PowerPoint to Markdown",
+ "canonical": "https://llmiser.devbehindyou.com/blog/powerpoint-to-markdown-checks",
+ "primary_keyword": "PowerPoint to Markdown",
+ "description": "Check PowerPoint-to-Markdown output for slide order, notes, charts and missing context before using the converted text with AI.",
+ "intent_key": "powerpoint-to-markdown-checks",
+ "intent": "Verify notes and chart behavior; do not imply all slide information becomes text.",
+ "excludes": "Verify notes and chart behavior; do not imply all slide information becomes text.",
+ "parent_id": "E08",
+ "nearest_ids": [
+ "E07",
+ "E08"
+ ],
+ "source_refs": [
+ "SRC-LOCAL"
+ ]
+}
+~~~
+
+Title: USER_SELECTED on 5 November 2026. Article: PROPOSED, not written or published.
+
+Metadata owner: [intent-registry.json](), record `M05`. Preserve the selected title exactly. Category: listicle. Parent context: E08.
+
+#### Reader task and limits
+
+Verify notes and chart behavior; do not imply all slide information becomes text.
+
+Nearest owners: E07, E08. Explain the overview here, then send detailed troubleshooting to the three supports. Avoid reproducing their full procedures.
+
+#### Outline
+
+1. Slide order
+2. Titles and section context
+3. Body text and bullet hierarchy
+4. Speaker notes
+5. Charts and axis labels
+6. Image-only slides
+7. Tables and numeric labels
+8. Output review against the original deck
+
+The title promises 8 items. Keep that count in the core numbered sections; introduction, FAQ and CTA are outside the count.
+
+#### Three supporting articles
+
+- [M05-S1: Check PowerPoint Speaker Notes After Conversion]() — Are important speaker notes represented in this output?
+- [M05-S2: Carry Chart Context From Slides Into AI Prompts]() — What chart information must accompany a text-only slide export?
+- [M05-S3: Keep Slide Titles and Order Clear in Markdown]() — How do I retain the sequence needed to interpret a deck?
+
+#### Evidence and source plan
+
+Source IDs: SRC-LOCAL. Resolve them in [sources.json](). Product-specific behavior requires the current app/code and an original sample, not a competitor feature list. Reuse the supports’ tested fixtures to avoid inventing separate demonstrations.
+
+- M05-S1: Three-slide deck with notes on one slide and no notes on another.
+- M05-S2: Original chart with labels, units and a visible trend; write a checked textual description.
+- M05-S3: Deck with repeated titles, a section slide and a sequence-dependent explanation.
+
+#### Visual plan
+
+Banner: illustrate this selected task with the current Prompt L identity, not a savings claim.
+
+1. An overview of the main workflow or numbered checks.
+2. A source-to-output comparison using the cluster fixture.
+3. A decision chart around the cluster’s scope boundary.
+4. A final inspection checklist with labels and a limitation.
+
+Each figure must use specific content from the draft. Review dark/light and narrow layout; four figures is not permission for decorative padding.
+
+#### Linking and CTA
+
+Link to E08 only for relevant broader context; use short handoffs to the three supports. Do not link to unpublished URLs until included in a release. One contextual converter CTA is enough. For M11/M12, explain that LLMiser prepares text and does not enforce trust or document precedence.
+
+### Main assignment M06: 7 Ways to Prepare Cleaner CSV Data for AI
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M06",
+ "title": "7 Ways to Prepare Cleaner CSV Data for AI",
+ "canonical": "https://llmiser.devbehindyou.com/blog/prepare-csv-data-for-ai",
+ "primary_keyword": "prepare CSV data for AI",
+ "description": "Prepare CSV data for AI by reviewing delimiters, quoting, encoding, headers and missing fields before conversion.",
+ "intent_key": "prepare-csv-data-for-ai",
+ "intent": "Own delimited-text preparation. Workbook styles, formulas and sheets stay with M03.",
+ "excludes": "Own delimited-text preparation. Workbook styles, formulas and sheets stay with M03.",
+ "parent_id": "E08",
+ "nearest_ids": [
+ "M03"
+ ],
+ "source_refs": [
+ "SRC-CSV",
+ "SRC-LOCAL"
+ ]
+}
+~~~
+
+Title: USER_SELECTED on 5 November 2026. Article: PROPOSED, not written or published.
+
+Metadata owner: [intent-registry.json](), record `M06`. Preserve the selected title exactly. Category: listicle. Parent context: E08.
+
+#### Reader task and limits
+
+Own delimited-text preparation. Workbook styles, formulas and sheets stay with M03.
+
+Nearest owners: M03. Explain the overview here, then send detailed troubleshooting to the three supports. Avoid reproducing their full procedures.
+
+#### Outline
+
+1. Identify the delimiter
+2. Quote separators inside cells
+3. Check text encoding
+4. Give columns meaningful headers
+5. Make units and data types explicit
+6. Inspect missing fields and row shape
+7. Test a small conversion sample
+
+The title promises 7 items. Keep that count in the core numbered sections; introduction, FAQ and CTA are outside the count.
+
+#### Three supporting articles
+
+- [M06-S1: Handle Commas and Quotes Inside CSV Cells]() — How do I verify that quoted separators remain inside a cell?
+- [M06-S2: Check CSV Encoding Before Sharing Text With AI]() — How can I diagnose corrupted text before using converted output?
+- [M06-S3: Distinguish Empty CSV Cells From Missing Fields]() — How do missing delimiters differ from intentionally blank values?
+
+#### Evidence and source plan
+
+Source IDs: SRC-CSV, SRC-LOCAL. Resolve them in [sources.json](). Product-specific behavior requires the current app/code and an original sample, not a competitor feature list. Reuse the supports’ tested fixtures to avoid inventing separate demonstrations.
+
+- M06-S1: Synthetic CSV with comma inside quotes, escaped quote and embedded newline.
+- M06-S2: UTF-8 sample with accented names and a deliberately misdecoded demonstration; no personal data.
+- M06-S3: Rows with a blank middle cell, missing last field and extra delimiter.
+
+#### Visual plan
+
+Banner: illustrate this selected task with the current Prompt L identity, not a savings claim.
+
+1. An overview of the main workflow or numbered checks.
+2. A source-to-output comparison using the cluster fixture.
+3. A decision chart around the cluster’s scope boundary.
+4. A final inspection checklist with labels and a limitation.
+
+Each figure must use specific content from the draft. Review dark/light and narrow layout; four figures is not permission for decorative padding.
+
+#### Linking and CTA
+
+Link to E08 only for relevant broader context; use short handoffs to the three supports. Do not link to unpublished URLs until included in a release. One contextual converter CTA is enough. For M11/M12, explain that LLMiser prepares text and does not enforce trust or document precedence.
+
+### Main assignment M07: How to Convert Multiple Files With LLMiser
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M07",
+ "title": "How to Convert Multiple Files With LLMiser",
+ "canonical": "https://llmiser.devbehindyou.com/blog/convert-multiple-files-llmiser",
+ "primary_keyword": "LLMiser batch conversion",
+ "description": "Learn how to convert multiple files with LLMiser, review each result, handle partial failures and download your Markdown outputs.",
+ "intent_key": "convert-multiple-files-llmiser",
+ "intent": "Batch intake and per-file outcomes; deeper editing/export belongs to M09.",
+ "excludes": "Batch intake and per-file outcomes; deeper editing/export belongs to M09.",
+ "parent_id": "E08",
+ "nearest_ids": [
+ "M09"
+ ],
+ "source_refs": [
+ "SRC-LOCAL"
+ ]
+}
+~~~
+
+Title: USER_SELECTED on 5 November 2026. Article: PROPOSED, not written or published.
+
+Metadata owner: [intent-registry.json](), record `M07`. Preserve the selected title exactly. Category: product. Parent context: E08.
+
+#### Reader task and limits
+
+Batch intake and per-file outcomes; deeper editing/export belongs to M09.
+
+Nearest owners: M09. Explain the overview here, then send detailed troubleshooting to the three supports. Avoid reproducing their full procedures.
+
+#### Outline
+
+1. Choose supported files and check limits
+2. Add files through picker or drag-and-drop
+3. Choose a profile and start conversion
+4. Read each file's outcome
+5. Review and download results
+6. Handle failures without assuming all succeeded
+
+#### Three supporting articles
+
+- [M07-S1: Plan a Batch With Different Supported File Types]() — How do I organize a supported mixed-format batch?
+- [M07-S2: Handle Partial Conversion Failures in a Batch]() — How do I recover when some files finish and others fail?
+- [M07-S3: Split a File Batch Around LLMiser's Upload Limits]() — How do I plan a batch that meets documented per-file and queue limits?
+
+#### Evidence and source plan
+
+Source IDs: SRC-LOCAL. Resolve them in [sources.json](). Product-specific behavior requires the current app/code and an original sample, not a competitor feature list. Reuse the supports’ tested fixtures to avoid inventing separate demonstrations.
+
+- M07-S1: Small PDF, DOCX and image fixture set with identifiable content in each.
+- M07-S2: One valid document plus an intentionally invalid supported-format fixture in a controlled local/test environment.
+- M07-S3: Local file-size/count inventory and UI validation checks; no oversized production upload necessary.
+
+#### Visual plan
+
+Banner: illustrate this selected task with the current Prompt L identity, not a savings claim.
+
+1. An overview of the main workflow or numbered checks.
+2. A source-to-output comparison using the cluster fixture.
+3. A decision chart around the cluster’s scope boundary.
+4. A final inspection checklist with labels and a limitation.
+
+Each figure must use specific content from the draft. Review dark/light and narrow layout; four figures is not permission for decorative padding.
+
+#### Linking and CTA
+
+Link to E08 only for relevant broader context; use short handoffs to the three supports. Do not link to unpublished URLs until included in a release. One contextual converter CTA is enough. For M11/M12, explain that LLMiser prepares text and does not enforce trust or document precedence.
+
+### Main assignment M08: LLMiser Profiles: Standard, Clean, Compact, RAG-ready
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M08",
+ "title": "LLMiser Profiles: Standard, Clean, Compact, RAG-ready",
+ "canonical": "https://llmiser.devbehindyou.com/blog/llmiser-processing-profiles",
+ "primary_keyword": "LLMiser processing profiles",
+ "description": "Compare Standard, Clean, Compact and RAG-ready in LLMiser. Choose a profile from actual output differences and review what changes.",
+ "intent_key": "llmiser-processing-profiles",
+ "intent": "Only shipped transformations; a profile is not a retriever, tokenizer or semantic repair tool.",
+ "excludes": "Only shipped transformations; a profile is not a retriever, tokenizer or semantic repair tool.",
+ "parent_id": "E08",
+ "nearest_ids": [
+ "E03",
+ "E05",
+ "E08"
+ ],
+ "source_refs": [
+ "SRC-LOCAL",
+ "SRC-MARKDOWN"
+ ]
+}
+~~~
+
+Title: USER_SELECTED on 5 November 2026. Article: PROPOSED, not written or published.
+
+Metadata owner: [intent-registry.json](), record `M08`. Preserve the selected title exactly. Category: product. Parent context: E08.
+
+#### Reader task and limits
+
+Only shipped transformations; a profile is not a retriever, tokenizer or semantic repair tool.
+
+Nearest owners: E03, E05, E08. Explain the overview here, then send detailed troubleshooting to the three supports. Avoid reproducing their full procedures.
+
+#### Outline
+
+1. Use one source for a fair comparison
+2. Standard output
+3. Clean output
+4. Compact output
+5. RAG-ready output
+6. Choose from actual differences, then inspect
+
+#### Three supporting articles
+
+- [M08-S1: Standard vs Clean: Compare LLMiser Output]() — What changes between Standard and Clean for the same input?
+- [M08-S2: Check Compact Markdown Before You Use It]() — What needs checking when compact formatting removes separators or spacing?
+- [M08-S3: What LLMiser's RAG-ready Markers Do]() — What does a chunk-boundary marker communicate and what does it not do?
+
+#### Evidence and source plan
+
+Source IDs: SRC-LOCAL, SRC-MARKDOWN. Resolve them in [sources.json](). Product-specific behavior requires the current app/code and an original sample, not a competitor feature list. Reuse the supports’ tested fixtures to avoid inventing separate demonstrations.
+
+- M08-S1: Same short Markdown/document input under both profiles, saved as an actual diff.
+- M08-S2: Fixture with blank lines, horizontal rules, table syntax and hyphen sequences; compare all bytes.
+- M08-S3: Fixture with H1/H2/H3 and fenced text; inspect marker placement without publishing a fragile splitter.
+
+#### Visual plan
+
+Banner: illustrate this selected task with the current Prompt L identity, not a savings claim.
+
+1. An overview of the main workflow or numbered checks.
+2. A source-to-output comparison using the cluster fixture.
+3. A decision chart around the cluster’s scope boundary.
+4. A final inspection checklist with labels and a limitation.
+
+Each figure must use specific content from the draft. Review dark/light and narrow layout; four figures is not permission for decorative padding.
+
+#### Linking and CTA
+
+Link to E08 only for relevant broader context; use short handoffs to the three supports. Do not link to unpublished URLs until included in a release. One contextual converter CTA is enough. For M11/M12, explain that LLMiser prepares text and does not enforce trust or document precedence.
+
+### Main assignment M09: How to Edit and Export Markdown With LLMiser
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M09",
+ "title": "How to Edit and Export Markdown With LLMiser",
+ "canonical": "https://llmiser.devbehindyou.com/blog/edit-export-markdown-llmiser",
+ "primary_keyword": "edit Markdown in LLMiser",
+ "description": "Use LLMiser to inspect, edit, copy and download Markdown. Check your exported file and distinguish edited text from original results.",
+ "intent_key": "edit-export-markdown-llmiser",
+ "intent": "Post-conversion workflow; batch queue management belongs to M07.",
+ "excludes": "Post-conversion workflow; batch queue management belongs to M07.",
+ "parent_id": "E08",
+ "nearest_ids": [
+ "M07"
+ ],
+ "source_refs": [
+ "SRC-LOCAL",
+ "SRC-MARKDOWN"
+ ]
+}
+~~~
+
+Title: USER_SELECTED on 5 November 2026. Article: PROPOSED, not written or published.
+
+Metadata owner: [intent-registry.json](), record `M09`. Preserve the selected title exactly. Category: product. Parent context: E08.
+
+#### Reader task and limits
+
+Post-conversion workflow; batch queue management belongs to M07.
+
+Nearest owners: M07. Explain the overview here, then send detailed troubleshooting to the three supports. Avoid reproducing their full procedures.
+
+#### Outline
+
+1. Open and inspect converted output
+2. Edit a working copy
+3. Understand original versus edited output
+4. Review long text without mistaking preview for truncation
+5. Choose copy or download
+6. Verify the exported file
+
+#### Three supporting articles
+
+- [M09-S1: Original or Edited Markdown: Which File Are You Saving?]() — How can I tell whether an export includes my edits?
+- [M09-S2: Check Long Markdown Beyond the Preview]() — How do I distinguish a limited rendering view from incomplete output?
+- [M09-S3: Copy or Download Markdown: Check the Result]() — What should I check after moving Markdown to another app?
+
+#### Evidence and source plan
+
+Source IDs: SRC-LOCAL, SRC-MARKDOWN. Resolve them in [sources.json](). Product-specific behavior requires the current app/code and an original sample, not a competitor feature list. Reuse the supports’ tested fixtures to avoid inventing separate demonstrations.
+
+- M09-S1: Tiny fixture with a unique marker inserted in editor; compare copy/download/recovery behavior.
+- M09-S2: Synthetic long text with markers at start, middle and end; inspect current preview/export behavior.
+- M09-S3: Small Unicode, pipe-table and fenced-code fixture copied to a plain text editor and downloaded.
+
+#### Visual plan
+
+Banner: illustrate this selected task with the current Prompt L identity, not a savings claim.
+
+1. An overview of the main workflow or numbered checks.
+2. A source-to-output comparison using the cluster fixture.
+3. A decision chart around the cluster’s scope boundary.
+4. A final inspection checklist with labels and a limitation.
+
+Each figure must use specific content from the draft. Review dark/light and narrow layout; four figures is not permission for decorative padding.
+
+#### Linking and CTA
+
+Link to E08 only for relevant broader context; use short handoffs to the three supports. Do not link to unpublished URLs until included in a release. One contextual converter CTA is enough. For M11/M12, explain that LLMiser prepares text and does not enforce trust or document precedence.
+
+### Main assignment M10: How to Read LLMiser's ZIP Index and Manifest
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M10",
+ "title": "How to Read LLMiser's ZIP Index and Manifest",
+ "canonical": "https://llmiser.devbehindyou.com/blog/llmiser-zip-index-manifest",
+ "primary_keyword": "LLMiser ZIP manifest",
+ "description": "Read the project index and manifest from a LLMiser ZIP conversion. Check paths, outcomes and missing content before using the results.",
+ "intent_key": "llmiser-zip-index-manifest",
+ "intent": "Artifact interpretation after conversion; pre-upload exclusions belong to M01.",
+ "excludes": "Artifact interpretation after conversion; pre-upload exclusions belong to M01.",
+ "parent_id": "E08",
+ "nearest_ids": [
+ "M01",
+ "E08"
+ ],
+ "source_refs": [
+ "SRC-LOCAL"
+ ]
+}
+~~~
+
+Title: USER_SELECTED on 5 November 2026. Article: PROPOSED, not written or published.
+
+Metadata owner: [intent-registry.json](), record `M10`. Preserve the selected title exactly. Category: product. Parent context: E08.
+
+#### Reader task and limits
+
+Artifact interpretation after conversion; pre-upload exclusions belong to M01.
+
+Nearest owners: M01, E08. Explain the overview here, then send detailed troubleshooting to the three supports. Avoid reproducing their full procedures.
+
+#### Outline
+
+1. Identify the returned artifacts
+2. Read paths in the project index
+3. Inspect actual manifest fields
+4. Account for expected and omitted files
+5. Investigate partial results
+6. Select context for the next task
+
+#### Three supporting articles
+
+- [M10-S1: Find Relevant Files in PROJECT_INDEX.md]() — How do source paths help locate the right converted file?
+- [M10-S2: Reconcile a ZIP Manifest With Your Source Files]() — How do I account for every intended source item after conversion?
+- [M10-S3: Investigate Missing Content in a ZIP Conversion]() — How do I distinguish an intentional exclusion from a conversion omission?
+
+#### Evidence and source plan
+
+Source IDs: SRC-LOCAL. Resolve them in [sources.json](). Product-specific behavior requires the current app/code and an original sample, not a competitor feature list. Reuse the supports’ tested fixtures to avoid inventing separate demonstrations.
+
+- M10-S1: ZIP with src/config.txt and docs/config.txt containing different text; inspect index and combined output.
+- M10-S2: Tiny ZIP inventory with valid supported entries and a deliberately unsupported harmless item; save actual manifest.
+- M10-S3: Controlled nested-archive or unsupported-entry fixture with documented limits; inspect actual result.
+
+#### Visual plan
+
+Banner: illustrate this selected task with the current Prompt L identity, not a savings claim.
+
+1. An overview of the main workflow or numbered checks.
+2. A source-to-output comparison using the cluster fixture.
+3. A decision chart around the cluster’s scope boundary.
+4. A final inspection checklist with labels and a limitation.
+
+Each figure must use specific content from the draft. Review dark/light and narrow layout; four figures is not permission for decorative padding.
+
+#### Linking and CTA
+
+Link to E08 only for relevant broader context; use short handoffs to the three supports. Do not link to unpublished URLs until included in a release. One contextual converter CTA is enough. For M11/M12, explain that LLMiser prepares text and does not enforce trust or document precedence.
+
+### Main assignment M11: Prompt Injection: Can a Document Hijack Your AI?
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M11",
+ "title": "Prompt Injection: Can a Document Hijack Your AI?",
+ "canonical": "https://llmiser.devbehindyou.com/blog/document-prompt-injection",
+ "primary_keyword": "document prompt injection",
+ "description": "Learn how instructions inside a document can redirect an AI task, why format conversion does not establish trust, and what to review.",
+ "intent_key": "document-prompt-injection",
+ "intent": "Education only: LLMiser is not a prompt-injection detector or security boundary.",
+ "excludes": "Education only: LLMiser is not a prompt-injection detector or security boundary.",
+ "parent_id": "E08",
+ "nearest_ids": [
+ "M12"
+ ],
+ "source_refs": [
+ "SRC-OWASP",
+ "SRC-INJECTION"
+ ]
+}
+~~~
+
+Title: USER_SELECTED on 5 November 2026. Article: PROPOSED, not written or published.
+
+Metadata owner: [intent-registry.json](), record `M11`. Preserve the selected title exactly. Category: misc. Parent context: E08.
+
+#### Reader task and limits
+
+Education only: LLMiser is not a prompt-injection detector or security boundary.
+
+Nearest owners: M12. Explain the overview here, then send detailed troubleshooting to the three supports. Avoid reproducing their full procedures.
+
+#### Outline
+
+1. Distinguish source content from trusted instructions
+2. Trace an indirect instruction attempt
+3. Recognize suspicious document language
+4. Why conversion does not establish trust
+5. Use review and limited downstream permissions
+6. Know the limits of detection
+
+#### Three supporting articles
+
+- [M11-S1: Recognize Instructions Inside an Untrusted Document]() — How do I recognize source text attempting to redirect the task?
+- [M11-S2: Why Markdown Conversion Does Not Remove Prompt Injection]() — Why can an instruction attempt survive a change of file format?
+- [M11-S3: Review AI Actions After Reading External Documents]() — What should a reader check before allowing actions derived from a document?
+
+#### Evidence and source plan
+
+Source IDs: SRC-OWASP, SRC-INJECTION. Resolve them in [sources.json](). Product-specific behavior requires the current app/code and an original sample, not a competitor feature list. Reuse the supports’ tested fixtures to avoid inventing separate demonstrations.
+
+- M11-S1: Inert local excerpt asking for an unrelated summary style, clearly labeled illustrative; no secret extraction or live attack.
+- M11-S2: Harmless imperative preserved through an original text/document conversion; inspect strings only.
+- M11-S3: Paper exercise comparing summarize-only task with a source requesting an external action; no messages sent.
+
+#### Visual plan
+
+Banner: illustrate this selected task with the current Prompt L identity, not a savings claim.
+
+1. An overview of the main workflow or numbered checks.
+2. A source-to-output comparison using the cluster fixture.
+3. A decision chart around the cluster’s scope boundary.
+4. A final inspection checklist with labels and a limitation.
+
+Each figure must use specific content from the draft. Review dark/light and narrow layout; four figures is not permission for decorative padding.
+
+#### Linking and CTA
+
+Link to E08 only for relevant broader context; use short handoffs to the three supports. Do not link to unpublished URLs until included in a release. One contextual converter CTA is enough. For M11/M12, explain that LLMiser prepares text and does not enforce trust or document precedence.
+
+### Main assignment M12: Why Two Versions of a Document Can Confuse AI
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M12",
+ "title": "Why Two Versions of a Document Can Confuse AI",
+ "canonical": "https://llmiser.devbehindyou.com/blog/conflicting-document-versions-ai",
+ "primary_keyword": "conflicting document versions AI",
+ "description": "Understand how conflicting document versions affect AI context. Keep provenance, effective dates and source scope clear before asking a question.",
+ "intent_key": "conflicting-document-versions-ai",
+ "intent": "Document provenance/conflicts, not another generic RAG, hallucination or deduplication guide.",
+ "excludes": "Document provenance/conflicts, not another generic RAG, hallucination or deduplication guide.",
+ "parent_id": "E08",
+ "nearest_ids": [
+ "E05",
+ "M11"
+ ],
+ "source_refs": [
+ "SRC-RETRIEVAL"
+ ]
+}
+~~~
+
+Title: USER_SELECTED on 5 November 2026. Article: PROPOSED, not written or published.
+
+Metadata owner: [intent-registry.json](), record `M12`. Preserve the selected title exactly. Category: misc. Parent context: E08.
+
+#### Reader task and limits
+
+Document provenance/conflicts, not another generic RAG, hallucination or deduplication guide.
+
+Nearest owners: E05, M11. Explain the overview here, then send detailed troubleshooting to the three supports. Avoid reproducing their full procedures.
+
+#### Outline
+
+1. Find the version conflict
+2. Preserve dates, provenance and scope
+3. Handle superseded versus simultaneously valid sources
+4. Resolve ambiguity without inventing precedence
+5. Remove stale excerpts from the working packet
+6. Test the answer against the chosen sources
+
+#### Three supporting articles
+
+- [M12-S1: Label Document Versions Before Building AI Context]() — Which provenance fields distinguish two versions of a source?
+- [M12-S2: Resolve Conflicting Policy Passages Before Asking AI]() — How do I handle two valid-looking passages with different scopes?
+- [M12-S3: Remove Stale Excerpts From an AI Context Packet]() — How do I update a manually assembled packet when a source changes?
+
+#### Evidence and source plan
+
+Source IDs: SRC-RETRIEVAL. Resolve them in [sources.json](). Product-specific behavior requires the current app/code and an original sample, not a competitor feature list. Reuse the supports’ tested fixtures to avoid inventing separate demonstrations.
+
+- M12-S1: Two synthetic policy revisions with filename, version and effective date, plus a stable source ID.
+- M12-S2: Two fictional company policies for different teams with different limits; no real legal interpretation.
+- M12-S3: Local packet containing old and new fictional deadlines; trace each excerpt to source revision.
+
+#### Visual plan
+
+Banner: illustrate this selected task with the current Prompt L identity, not a savings claim.
+
+1. An overview of the main workflow or numbered checks.
+2. A source-to-output comparison using the cluster fixture.
+3. A decision chart around the cluster’s scope boundary.
+4. A final inspection checklist with labels and a limitation.
+
+Each figure must use specific content from the draft. Review dark/light and narrow layout; four figures is not permission for decorative padding.
+
+#### Linking and CTA
+
+Link to E08 only for relevant broader context; use short handoffs to the three supports. Do not link to unpublished URLs until included in a release. One contextual converter CTA is enough. For M11/M12, explain that LLMiser prepares text and does not enforce trust or document precedence.
+
+
+## 13. Support-article assignments
+
+Write these thirty-six articles after the main drafts. Exactly three belong to each main. Proposed titles may improve with evidence without shifting ownership or silently adding competing URLs.
+
+### Support assignment M01-S1: Check a Project ZIP for Secrets Before Sharing It
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M01-S1",
+ "title": "Check a Project ZIP for Secrets Before Sharing It",
+ "canonical": "https://llmiser.devbehindyou.com/blog/project-zip-secret-review",
+ "primary_keyword": "check code ZIP for secrets",
+ "description": "How do I review a sharing copy for credentials and private data? See a practical example, checks and limitations.",
+ "intent_key": "project-zip-secret-review",
+ "intent": "How do I review a sharing copy for credentials and private data?",
+ "excludes": "Do not use real secrets or imply the converter detects credentials. Main checklist and sibling questions remain with their owners.",
+ "parent_id": "M01",
+ "nearest_ids": [
+ "M01-S2",
+ "M01-S3",
+ "M01"
+ ],
+ "source_refs": [
+ "SRC-GIT",
+ "SRC-LOCAL"
+ ]
+}
+~~~
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M01: 7 Things to Remove Before Sharing a Codebase With AI](). Metadata: [intent registry](), `M01-S1`.
+
+#### Single reader question
+
+How do I review a sharing copy for credentials and private data?
+
+#### Outline
+
+1. Locate configuration and logs
+2. Inspect an extracted sharing copy
+3. Remove sensitive material and recheck
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+#### Original example to produce
+
+Toy repo with clearly fake keys, a synthetic log and harmless config. Compare the original and sharing inventory.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+#### Exclusions and nearest intents
+
+Do not use real secrets or imply the converter detects credentials.
+
+The parent owns the general checklist. Related support owners:
+
+- [M01-S2](): What should remain when installed packages are removed?
+- [M01-S3](): How do I select enough source and tests for one code question?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-GIT, SRC-LOCAL. See [sources.json]().
+
+#### Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Locate configuration and logs”.
+2. Map the decision or procedure in “Inspect an extracted sharing copy”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Remove sensitive material and recheck” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+#### Supporting posts
+
+Exactly three separate briefs: [posts for M01-S1](). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+#### Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+### Support assignment M01-S2: Which Dependency Files Should You Keep for AI Review?
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M01-S2",
+ "title": "Which Dependency Files Should You Keep for AI Review?",
+ "canonical": "https://llmiser.devbehindyou.com/blog/dependency-files-ai-review",
+ "primary_keyword": "dependency files for AI code review",
+ "description": "What should remain when installed packages are removed? See a practical example, checks and limitations.",
+ "intent_key": "dependency-files-ai-review",
+ "intent": "What should remain when installed packages are removed?",
+ "excludes": "Do not prescribe removing all lockfiles or all vendored source. Main checklist and sibling questions remain with their owners.",
+ "parent_id": "M01",
+ "nearest_ids": [
+ "M01-S1",
+ "M01-S3",
+ "M01"
+ ],
+ "source_refs": [
+ "SRC-GIT",
+ "SRC-LOCAL"
+ ]
+}
+~~~
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M01: 7 Things to Remove Before Sharing a Codebase With AI](). Metadata: [intent registry](), `M01-S2`.
+
+#### Single reader question
+
+What should remain when installed packages are removed?
+
+#### Outline
+
+1. Separate manifests from installed packages
+2. Match files to the review question
+3. Keep version context
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+#### Original example to produce
+
+Toy project with package manifest, lockfile, vendor folder and import requiring version context.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+#### Exclusions and nearest intents
+
+Do not prescribe removing all lockfiles or all vendored source.
+
+The parent owns the general checklist. Related support owners:
+
+- [M01-S1](): How do I review a sharing copy for credentials and private data?
+- [M01-S3](): How do I select enough source and tests for one code question?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-GIT, SRC-LOCAL. See [sources.json]().
+
+#### Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Separate manifests from installed packages”.
+2. Map the decision or procedure in “Match files to the review question”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Keep version context” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+#### Supporting posts
+
+Exactly three separate briefs: [posts for M01-S2](). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+#### Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+### Support assignment M01-S3: Build a Task-Focused Code Bundle With Tests
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M01-S3",
+ "title": "Build a Task-Focused Code Bundle With Tests",
+ "canonical": "https://llmiser.devbehindyou.com/blog/task-focused-code-bundle",
+ "primary_keyword": "task focused code bundle",
+ "description": "How do I select enough source and tests for one code question? See a practical example, checks and limitations.",
+ "intent_key": "task-focused-code-bundle",
+ "intent": "How do I select enough source and tests for one code question?",
+ "excludes": "No universal file-count or answer-quality improvement promise. Main checklist and sibling questions remain with their owners.",
+ "parent_id": "M01",
+ "nearest_ids": [
+ "M01-S1",
+ "M01-S2",
+ "M01"
+ ],
+ "source_refs": [
+ "SRC-GIT",
+ "SRC-LOCAL"
+ ]
+}
+~~~
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M01: 7 Things to Remove Before Sharing a Codebase With AI](). Metadata: [intent registry](), `M01-S3`.
+
+#### Single reader question
+
+How do I select enough source and tests for one code question?
+
+#### Outline
+
+1. Define the question
+2. Trace relevant imports and tests
+3. Review omissions
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+#### Original example to produce
+
+Toy bug spanning a caller, helper and test; compare a minimal sufficient bundle with an incomplete one.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+#### Exclusions and nearest intents
+
+No universal file-count or answer-quality improvement promise.
+
+The parent owns the general checklist. Related support owners:
+
+- [M01-S1](): How do I review a sharing copy for credentials and private data?
+- [M01-S2](): What should remain when installed packages are removed?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-GIT, SRC-LOCAL. See [sources.json]().
+
+#### Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Define the question”.
+2. Map the decision or procedure in “Trace relevant imports and tests”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Review omissions” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+#### Supporting posts
+
+Exactly three separate briefs: [posts for M01-S3](). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+#### Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+### Support assignment M02-S1: Check Rotated Scans Before Running OCR
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M02-S1",
+ "title": "Check Rotated Scans Before Running OCR",
+ "canonical": "https://llmiser.devbehindyou.com/blog/rotated-scan-ocr-check",
+ "primary_keyword": "rotated scan OCR check",
+ "description": "How does orientation affect recognition in a specific sample? See a practical example, checks and limitations.",
+ "intent_key": "rotated-scan-ocr-check",
+ "intent": "How does orientation affect recognition in a specific sample?",
+ "excludes": "Do not claim LLMiser always corrects rotation automatically. Main checklist and sibling questions remain with their owners.",
+ "parent_id": "M02",
+ "nearest_ids": [
+ "M02-S2",
+ "M02-S3",
+ "M02"
+ ],
+ "source_refs": [
+ "SRC-LOCAL",
+ "SRC-OCR-RESEARCH"
+ ]
+}
+~~~
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M02: 9 OCR Checks Before You Send Scanned Text to AI](). Metadata: [intent registry](), `M02-S1`.
+
+#### Single reader question
+
+How does orientation affect recognition in a specific sample?
+
+#### Outline
+
+1. Inspect orientation
+2. Compare original and corrected copy
+3. Check output against both
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+#### Original example to produce
+
+Synthetic English image at 0 and 90 degrees, plus a carefully rotated copy; save actual outputs.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+#### Exclusions and nearest intents
+
+Do not claim LLMiser always corrects rotation automatically.
+
+The parent owns the general checklist. Related support owners:
+
+- [M02-S2](): How do I verify digits and labels without trusting fluent OCR text?
+- [M02-S3](): How do I confirm that a PDF with text and scanned pages is represented?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-LOCAL, SRC-OCR-RESEARCH. See [sources.json]().
+
+#### Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Inspect orientation”.
+2. Map the decision or procedure in “Compare original and corrected copy”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Check output against both” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+#### Supporting posts
+
+Exactly three separate briefs: [posts for M02-S1](). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+#### Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+### Support assignment M02-S2: Verify Numbers and Identifiers in OCR Output
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M02-S2",
+ "title": "Verify Numbers and Identifiers in OCR Output",
+ "canonical": "https://llmiser.devbehindyou.com/blog/verify-ocr-numbers",
+ "primary_keyword": "verify numbers in OCR output",
+ "description": "How do I verify digits and labels without trusting fluent OCR text? See a practical example, checks and limitations.",
+ "intent_key": "verify-ocr-numbers",
+ "intent": "How do I verify digits and labels without trusting fluent OCR text?",
+ "excludes": "No financial recommendation; report character fidelity, not invented accuracy rates. Main checklist and sibling questions remain with their owners.",
+ "parent_id": "M02",
+ "nearest_ids": [
+ "M02-S1",
+ "M02-S3",
+ "M02"
+ ],
+ "source_refs": [
+ "SRC-LOCAL",
+ "SRC-OCR-RESEARCH"
+ ]
+}
+~~~
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M02: 9 OCR Checks Before You Send Scanned Text to AI](). Metadata: [intent registry](), `M02-S2`.
+
+#### Single reader question
+
+How do I verify digits and labels without trusting fluent OCR text?
+
+#### Outline
+
+1. Locate high-impact fields
+2. Compare exact characters and separators
+3. Record corrections
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+#### Original example to produce
+
+Synthetic invoice with 00123, 10.50, a date and letter O/zero examples.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+#### Exclusions and nearest intents
+
+No financial recommendation; report character fidelity, not invented accuracy rates.
+
+The parent owns the general checklist. Related support owners:
+
+- [M02-S1](): How does orientation affect recognition in a specific sample?
+- [M02-S3](): How do I confirm that a PDF with text and scanned pages is represented?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-LOCAL, SRC-OCR-RESEARCH. See [sources.json]().
+
+#### Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Locate high-impact fields”.
+2. Map the decision or procedure in “Compare exact characters and separators”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Record corrections” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+#### Supporting posts
+
+Exactly three separate briefs: [posts for M02-S2](). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+#### Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+### Support assignment M02-S3: Check OCR Coverage in a Mixed PDF
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M02-S3",
+ "title": "Check OCR Coverage in a Mixed PDF",
+ "canonical": "https://llmiser.devbehindyou.com/blog/mixed-pdf-ocr-coverage",
+ "primary_keyword": "mixed PDF OCR coverage",
+ "description": "How do I confirm that a PDF with text and scanned pages is represented? See a practical example, checks and limitations.",
+ "intent_key": "mixed-pdf-ocr-coverage",
+ "intent": "How do I confirm that a PDF with text and scanned pages is represented?",
+ "excludes": "No page-level OCR routing or page-count guarantee without observed evidence. Main checklist and sibling questions remain with their owners.",
+ "parent_id": "M02",
+ "nearest_ids": [
+ "M02-S1",
+ "M02-S2",
+ "M02"
+ ],
+ "source_refs": [
+ "SRC-LOCAL",
+ "SRC-OCR-RESEARCH"
+ ]
+}
+~~~
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M02: 9 OCR Checks Before You Send Scanned Text to AI](). Metadata: [intent registry](), `M02-S3`.
+
+#### Single reader question
+
+How do I confirm that a PDF with text and scanned pages is represented?
+
+#### Outline
+
+1. Inventory page types
+2. Locate each page in output
+3. Investigate missing or duplicate text
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+#### Original example to produce
+
+Three-page fixture with native text, image-only text and an intentional blank page.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+#### Exclusions and nearest intents
+
+No page-level OCR routing or page-count guarantee without observed evidence.
+
+The parent owns the general checklist. Related support owners:
+
+- [M02-S1](): How does orientation affect recognition in a specific sample?
+- [M02-S2](): How do I verify digits and labels without trusting fluent OCR text?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-LOCAL, SRC-OCR-RESEARCH. See [sources.json]().
+
+#### Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Inventory page types”.
+2. Map the decision or procedure in “Locate each page in output”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Investigate missing or duplicate text” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+#### Supporting posts
+
+Exactly three separate briefs: [posts for M02-S3](). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+#### Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+### Support assignment M03-S1: Keep Leading Zeros When Preparing Excel Data for AI
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M03-S1",
+ "title": "Keep Leading Zeros When Preparing Excel Data for AI",
+ "canonical": "https://llmiser.devbehindyou.com/blog/excel-leading-zeros-ai",
+ "primary_keyword": "Excel leading zeros AI",
+ "description": "How do I distinguish identifiers from numeric quantities? See a practical example, checks and limitations.",
+ "intent_key": "excel-leading-zeros-ai",
+ "intent": "How do I distinguish identifiers from numeric quantities?",
+ "excludes": "Display formatting and stored values may differ; conversion cannot restore lost digits. Main checklist and sibling questions remain with their owners.",
+ "parent_id": "M03",
+ "nearest_ids": [
+ "M03-S2",
+ "M03-S3",
+ "M03"
+ ],
+ "source_refs": [
+ "SRC-EXCEL",
+ "SRC-LOCAL"
+ ]
+}
+~~~
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M03: 7 Excel Details to Check Before Sharing Data With AI](). Metadata: [intent registry](), `M03-S1`.
+
+#### Single reader question
+
+How do I distinguish identifiers from numeric quantities?
+
+#### Outline
+
+1. Identify identifier columns
+2. Inspect stored value versus formatting
+3. Compare converted output
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+#### Original example to produce
+
+Workbook with text 00123, numeric 123 formatted as 00000 and a long ID.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+#### Exclusions and nearest intents
+
+Display formatting and stored values may differ; conversion cannot restore lost digits.
+
+The parent owns the general checklist. Related support owners:
+
+- [M03-S2](): What evidence shows whether formula results are current?
+- [M03-S3](): How can I make multi-level spreadsheet labels unambiguous?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-EXCEL, SRC-LOCAL. See [sources.json]().
+
+#### Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Identify identifier columns”.
+2. Map the decision or procedure in “Inspect stored value versus formatting”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Compare converted output” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+#### Supporting posts
+
+Exactly three separate briefs: [posts for M03-S1](). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+#### Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+### Support assignment M03-S2: Check Excel Formula Results Before Conversion
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M03-S2",
+ "title": "Check Excel Formula Results Before Conversion",
+ "canonical": "https://llmiser.devbehindyou.com/blog/excel-formula-results-conversion",
+ "primary_keyword": "Excel formula results conversion",
+ "description": "What evidence shows whether formula results are current? See a practical example, checks and limitations.",
+ "intent_key": "excel-formula-results-conversion",
+ "intent": "What evidence shows whether formula results are current?",
+ "excludes": "Do not claim the converter recalculates formulas; record app and workbook provenance. Main checklist and sibling questions remain with their owners.",
+ "parent_id": "M03",
+ "nearest_ids": [
+ "M03-S1",
+ "M03-S3",
+ "M03"
+ ],
+ "source_refs": [
+ "SRC-EXCEL",
+ "SRC-LOCAL"
+ ]
+}
+~~~
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M03: 7 Excel Details to Check Before Sharing Data With AI](). Metadata: [intent registry](), `M03-S2`.
+
+#### Single reader question
+
+What evidence shows whether formula results are current?
+
+#### Outline
+
+1. Separate formulas from calculated values
+2. Save a reviewed source copy
+3. Inspect actual Markdown values
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+#### Original example to produce
+
+Workbook with formula, known result and a stale/absent cached-value case where reproducible.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+#### Exclusions and nearest intents
+
+Do not claim the converter recalculates formulas; record app and workbook provenance.
+
+The parent owns the general checklist. Related support owners:
+
+- [M03-S1](): How do I distinguish identifiers from numeric quantities?
+- [M03-S3](): How can I make multi-level spreadsheet labels unambiguous?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-EXCEL, SRC-LOCAL. See [sources.json]().
+
+#### Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Separate formulas from calculated values”.
+2. Map the decision or procedure in “Save a reviewed source copy”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Inspect actual Markdown values” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+#### Supporting posts
+
+Exactly three separate briefs: [posts for M03-S2](). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+#### Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+### Support assignment M03-S3: Prepare Merged Excel Headers for Markdown Tables
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M03-S3",
+ "title": "Prepare Merged Excel Headers for Markdown Tables",
+ "canonical": "https://llmiser.devbehindyou.com/blog/merged-excel-headers-markdown",
+ "primary_keyword": "merged Excel headers Markdown",
+ "description": "How can I make multi-level spreadsheet labels unambiguous? See a practical example, checks and limitations.",
+ "intent_key": "merged-excel-headers-markdown",
+ "intent": "How can I make multi-level spreadsheet labels unambiguous?",
+ "excludes": "Manual flattening must preserve meaning; no automatic merged-cell repair claim. Main checklist and sibling questions remain with their owners.",
+ "parent_id": "M03",
+ "nearest_ids": [
+ "M03-S1",
+ "M03-S2",
+ "M03"
+ ],
+ "source_refs": [
+ "SRC-EXCEL",
+ "SRC-LOCAL"
+ ]
+}
+~~~
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M03: 7 Excel Details to Check Before Sharing Data With AI](). Metadata: [intent registry](), `M03-S3`.
+
+#### Single reader question
+
+How can I make multi-level spreadsheet labels unambiguous?
+
+#### Outline
+
+1. Identify grouped labels
+2. Create a clearly labeled sharing copy
+3. Compare row-column meaning
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+#### Original example to produce
+
+Small two-level header workbook and manually flattened copy with units retained.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+#### Exclusions and nearest intents
+
+Manual flattening must preserve meaning; no automatic merged-cell repair claim.
+
+The parent owns the general checklist. Related support owners:
+
+- [M03-S1](): How do I distinguish identifiers from numeric quantities?
+- [M03-S2](): What evidence shows whether formula results are current?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-EXCEL, SRC-LOCAL. See [sources.json]().
+
+#### Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Identify grouped labels”.
+2. Map the decision or procedure in “Create a clearly labeled sharing copy”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Compare row-column meaning” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+#### Supporting posts
+
+Exactly three separate briefs: [posts for M03-S3](). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+#### Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+### Support assignment M04-S1: Use Word Heading Styles Before Markdown Conversion
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M04-S1",
+ "title": "Use Word Heading Styles Before Markdown Conversion",
+ "canonical": "https://llmiser.devbehindyou.com/blog/word-heading-styles-markdown",
+ "primary_keyword": "Word heading styles Markdown",
+ "description": "How do semantic styles differ from large bold text? See a practical example, checks and limitations.",
+ "intent_key": "word-heading-styles-markdown",
+ "intent": "How do semantic styles differ from large bold text?",
+ "excludes": "General semantic-heading sources do not prove exact DOCX parser behavior; test it. Main checklist and sibling questions remain with their owners.",
+ "parent_id": "M04",
+ "nearest_ids": [
+ "M04-S2",
+ "M04-S3",
+ "M04"
+ ],
+ "source_refs": [
+ "SRC-HEADINGS",
+ "SRC-LOCAL"
+ ]
+}
+~~~
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M04: 6 Ways to Prepare Word Documents for AI](). Metadata: [intent registry](), `M04-S1`.
+
+#### Single reader question
+
+How do semantic styles differ from large bold text?
+
+#### Outline
+
+1. Inspect Word styles
+2. Apply a consistent hierarchy
+3. Check Markdown heading levels
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+#### Original example to produce
+
+DOCX pair with visually similar bold text versus actual heading styles.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+#### Exclusions and nearest intents
+
+General semantic-heading sources do not prove exact DOCX parser behavior; test it.
+
+The parent owns the general checklist. Related support owners:
+
+- [M04-S2](): How do I verify parent-child relationships in converted lists?
+- [M04-S3](): Which revision view and comments should a shared document represent?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-HEADINGS, SRC-LOCAL. See [sources.json]().
+
+#### Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Inspect Word styles”.
+2. Map the decision or procedure in “Apply a consistent hierarchy”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Check Markdown heading levels” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+#### Supporting posts
+
+Exactly three separate briefs: [posts for M04-S1](). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+#### Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+### Support assignment M04-S2: Check Nested Word Lists in Markdown Output
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M04-S2",
+ "title": "Check Nested Word Lists in Markdown Output",
+ "canonical": "https://llmiser.devbehindyou.com/blog/nested-word-lists-markdown",
+ "primary_keyword": "nested Word lists Markdown",
+ "description": "How do I verify parent-child relationships in converted lists? See a practical example, checks and limitations.",
+ "intent_key": "nested-word-lists-markdown",
+ "intent": "How do I verify parent-child relationships in converted lists?",
+ "excludes": "Do not promise lossless numbering; preserve the original. Main checklist and sibling questions remain with their owners.",
+ "parent_id": "M04",
+ "nearest_ids": [
+ "M04-S1",
+ "M04-S3",
+ "M04"
+ ],
+ "source_refs": [
+ "SRC-HEADINGS",
+ "SRC-LOCAL"
+ ]
+}
+~~~
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M04: 6 Ways to Prepare Word Documents for AI](). Metadata: [intent registry](), `M04-S2`.
+
+#### Single reader question
+
+How do I verify parent-child relationships in converted lists?
+
+#### Outline
+
+1. Identify list levels
+2. Compare item order and nesting
+3. Repair a working copy and recheck
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+#### Original example to produce
+
+DOCX with nested numbered and bulleted items, including restarted numbering.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+#### Exclusions and nearest intents
+
+Do not promise lossless numbering; preserve the original.
+
+The parent owns the general checklist. Related support owners:
+
+- [M04-S1](): How do semantic styles differ from large bold text?
+- [M04-S3](): Which revision view and comments should a shared document represent?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-HEADINGS, SRC-LOCAL. See [sources.json]().
+
+#### Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Identify list levels”.
+2. Map the decision or procedure in “Compare item order and nesting”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Repair a working copy and recheck” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+#### Supporting posts
+
+Exactly three separate briefs: [posts for M04-S2](). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+#### Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+### Support assignment M04-S3: Prepare Word Revisions and Comments for AI Sharing
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M04-S3",
+ "title": "Prepare Word Revisions and Comments for AI Sharing",
+ "canonical": "https://llmiser.devbehindyou.com/blog/word-revisions-ai-sharing",
+ "primary_keyword": "Word tracked changes AI sharing",
+ "description": "Which revision view and comments should a shared document represent? See a practical example, checks and limitations.",
+ "intent_key": "word-revisions-ai-sharing",
+ "intent": "Which revision view and comments should a shared document represent?",
+ "excludes": "Do not silently accept changes or claim all comments are extracted/removed. Main checklist and sibling questions remain with their owners.",
+ "parent_id": "M04",
+ "nearest_ids": [
+ "M04-S1",
+ "M04-S2",
+ "M04"
+ ],
+ "source_refs": [
+ "SRC-HEADINGS",
+ "SRC-LOCAL"
+ ]
+}
+~~~
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M04: 6 Ways to Prepare Word Documents for AI](). Metadata: [intent registry](), `M04-S3`.
+
+#### Single reader question
+
+Which revision view and comments should a shared document represent?
+
+#### Outline
+
+1. Decide the intended revision
+2. Create a reviewed sharing copy
+3. Compare extracted text with that copy
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+#### Original example to produce
+
+Synthetic DOCX containing a harmless tracked replacement and comment; record the chosen revision view.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+#### Exclusions and nearest intents
+
+Do not silently accept changes or claim all comments are extracted/removed.
+
+The parent owns the general checklist. Related support owners:
+
+- [M04-S1](): How do semantic styles differ from large bold text?
+- [M04-S2](): How do I verify parent-child relationships in converted lists?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-HEADINGS, SRC-LOCAL. See [sources.json]().
+
+#### Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Decide the intended revision”.
+2. Map the decision or procedure in “Create a reviewed sharing copy”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Compare extracted text with that copy” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+#### Supporting posts
+
+Exactly three separate briefs: [posts for M04-S3](). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+#### Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+### Support assignment M05-S1: Check PowerPoint Speaker Notes After Conversion
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M05-S1",
+ "title": "Check PowerPoint Speaker Notes After Conversion",
+ "canonical": "https://llmiser.devbehindyou.com/blog/powerpoint-speaker-notes-markdown",
+ "primary_keyword": "PowerPoint speaker notes Markdown",
+ "description": "Are important speaker notes represented in this output? See a practical example, checks and limitations.",
+ "intent_key": "powerpoint-speaker-notes-markdown",
+ "intent": "Are important speaker notes represented in this output?",
+ "excludes": "Notes extraction is a test question, not an advertised verified feature. Main checklist and sibling questions remain with their owners.",
+ "parent_id": "M05",
+ "nearest_ids": [
+ "M05-S2",
+ "M05-S3",
+ "M05"
+ ],
+ "source_refs": [
+ "SRC-LOCAL"
+ ]
+}
+~~~
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M05: 8 Checks When Converting PowerPoint to Markdown](). Metadata: [intent registry](), `M05-S1`.
+
+#### Single reader question
+
+Are important speaker notes represented in this output?
+
+#### Outline
+
+1. Inventory slides with notes
+2. Compare slide text and note text
+3. Provide missing context explicitly
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+#### Original example to produce
+
+Three-slide deck with notes on one slide and no notes on another.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+#### Exclusions and nearest intents
+
+Notes extraction is a test question, not an advertised verified feature.
+
+The parent owns the general checklist. Related support owners:
+
+- [M05-S2](): What chart information must accompany a text-only slide export?
+- [M05-S3](): How do I retain the sequence needed to interpret a deck?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-LOCAL. See [sources.json]().
+
+#### Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Inventory slides with notes”.
+2. Map the decision or procedure in “Compare slide text and note text”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Provide missing context explicitly” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+#### Supporting posts
+
+Exactly three separate briefs: [posts for M05-S1](). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+#### Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+### Support assignment M05-S2: Carry Chart Context From Slides Into AI Prompts
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M05-S2",
+ "title": "Carry Chart Context From Slides Into AI Prompts",
+ "canonical": "https://llmiser.devbehindyou.com/blog/slide-chart-context-ai",
+ "primary_keyword": "PowerPoint chart context AI",
+ "description": "What chart information must accompany a text-only slide export? See a practical example, checks and limitations.",
+ "intent_key": "slide-chart-context-ai",
+ "intent": "What chart information must accompany a text-only slide export?",
+ "excludes": "Never infer values that were not readable or claim automatic chart understanding. Main checklist and sibling questions remain with their owners.",
+ "parent_id": "M05",
+ "nearest_ids": [
+ "M05-S1",
+ "M05-S3",
+ "M05"
+ ],
+ "source_refs": [
+ "SRC-LOCAL"
+ ]
+}
+~~~
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M05: 8 Checks When Converting PowerPoint to Markdown](). Metadata: [intent registry](), `M05-S2`.
+
+#### Single reader question
+
+What chart information must accompany a text-only slide export?
+
+#### Outline
+
+1. Identify the question and chart evidence
+2. Record axes units and legend
+3. Keep the visual when needed
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+#### Original example to produce
+
+Original chart with labels, units and a visible trend; write a checked textual description.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+#### Exclusions and nearest intents
+
+Never infer values that were not readable or claim automatic chart understanding.
+
+The parent owns the general checklist. Related support owners:
+
+- [M05-S1](): Are important speaker notes represented in this output?
+- [M05-S3](): How do I retain the sequence needed to interpret a deck?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-LOCAL. See [sources.json]().
+
+#### Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Identify the question and chart evidence”.
+2. Map the decision or procedure in “Record axes units and legend”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Keep the visual when needed” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+#### Supporting posts
+
+Exactly three separate briefs: [posts for M05-S2](). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+#### Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+### Support assignment M05-S3: Keep Slide Titles and Order Clear in Markdown
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M05-S3",
+ "title": "Keep Slide Titles and Order Clear in Markdown",
+ "canonical": "https://llmiser.devbehindyou.com/blog/slide-order-markdown",
+ "primary_keyword": "PowerPoint slide order Markdown",
+ "description": "How do I retain the sequence needed to interpret a deck? See a practical example, checks and limitations.",
+ "intent_key": "slide-order-markdown",
+ "intent": "How do I retain the sequence needed to interpret a deck?",
+ "excludes": "No artificial page/slide numbers unless traced to the source. Main checklist and sibling questions remain with their owners.",
+ "parent_id": "M05",
+ "nearest_ids": [
+ "M05-S1",
+ "M05-S2",
+ "M05"
+ ],
+ "source_refs": [
+ "SRC-LOCAL"
+ ]
+}
+~~~
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M05: 8 Checks When Converting PowerPoint to Markdown](). Metadata: [intent registry](), `M05-S3`.
+
+#### Single reader question
+
+How do I retain the sequence needed to interpret a deck?
+
+#### Outline
+
+1. Map slide sequence
+2. Check title-to-body association
+3. Verify rearranged or repeated titles
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+#### Original example to produce
+
+Deck with repeated titles, a section slide and a sequence-dependent explanation.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+#### Exclusions and nearest intents
+
+No artificial page/slide numbers unless traced to the source.
+
+The parent owns the general checklist. Related support owners:
+
+- [M05-S1](): Are important speaker notes represented in this output?
+- [M05-S2](): What chart information must accompany a text-only slide export?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-LOCAL. See [sources.json]().
+
+#### Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Map slide sequence”.
+2. Map the decision or procedure in “Check title-to-body association”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Verify rearranged or repeated titles” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+#### Supporting posts
+
+Exactly three separate briefs: [posts for M05-S3](). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+#### Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+### Support assignment M06-S1: Handle Commas and Quotes Inside CSV Cells
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M06-S1",
+ "title": "Handle Commas and Quotes Inside CSV Cells",
+ "canonical": "https://llmiser.devbehindyou.com/blog/csv-quoted-cells-markdown",
+ "primary_keyword": "CSV quoted cells Markdown",
+ "description": "How do I verify that quoted separators remain inside a cell? See a practical example, checks and limitations.",
+ "intent_key": "csv-quoted-cells-markdown",
+ "intent": "How do I verify that quoted separators remain inside a cell?",
+ "excludes": "Do not recommend global comma replacement or splitting on commas without a CSV parser. Main checklist and sibling questions remain with their owners.",
+ "parent_id": "M06",
+ "nearest_ids": [
+ "M06-S2",
+ "M06-S3",
+ "M06"
+ ],
+ "source_refs": [
+ "SRC-CSV",
+ "SRC-LOCAL"
+ ]
+}
+~~~
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M06: 7 Ways to Prepare Cleaner CSV Data for AI](). Metadata: [intent registry](), `M06-S1`.
+
+#### Single reader question
+
+How do I verify that quoted separators remain inside a cell?
+
+#### Outline
+
+1. Identify separator and quoting
+2. Test embedded commas and newlines
+3. Check resulting row widths
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+#### Original example to produce
+
+Synthetic CSV with comma inside quotes, escaped quote and embedded newline.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+#### Exclusions and nearest intents
+
+Do not recommend global comma replacement or splitting on commas without a CSV parser.
+
+The parent owns the general checklist. Related support owners:
+
+- [M06-S2](): How can I diagnose corrupted text before using converted output?
+- [M06-S3](): How do missing delimiters differ from intentionally blank values?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-CSV, SRC-LOCAL. See [sources.json]().
+
+#### Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Identify separator and quoting”.
+2. Map the decision or procedure in “Test embedded commas and newlines”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Check resulting row widths” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+#### Supporting posts
+
+Exactly three separate briefs: [posts for M06-S1](). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+#### Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+### Support assignment M06-S2: Check CSV Encoding Before Sharing Text With AI
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M06-S2",
+ "title": "Check CSV Encoding Before Sharing Text With AI",
+ "canonical": "https://llmiser.devbehindyou.com/blog/csv-encoding-ai",
+ "primary_keyword": "CSV encoding AI",
+ "description": "How can I diagnose corrupted text before using converted output? See a practical example, checks and limitations.",
+ "intent_key": "csv-encoding-ai",
+ "intent": "How can I diagnose corrupted text before using converted output?",
+ "excludes": "Do not claim encoding detection is infallible or imply interface languages change OCR. Main checklist and sibling questions remain with their owners.",
+ "parent_id": "M06",
+ "nearest_ids": [
+ "M06-S1",
+ "M06-S3",
+ "M06"
+ ],
+ "source_refs": [
+ "SRC-CSV",
+ "SRC-LOCAL"
+ ]
+}
+~~~
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M06: 7 Ways to Prepare Cleaner CSV Data for AI](). Metadata: [intent registry](), `M06-S2`.
+
+#### Single reader question
+
+How can I diagnose corrupted text before using converted output?
+
+#### Outline
+
+1. Identify the source encoding
+2. Compare representative characters
+3. Export a verified copy
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+#### Original example to produce
+
+UTF-8 sample with accented names and a deliberately misdecoded demonstration; no personal data.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+#### Exclusions and nearest intents
+
+Do not claim encoding detection is infallible or imply interface languages change OCR.
+
+The parent owns the general checklist. Related support owners:
+
+- [M06-S1](): How do I verify that quoted separators remain inside a cell?
+- [M06-S3](): How do missing delimiters differ from intentionally blank values?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-CSV, SRC-LOCAL. See [sources.json]().
+
+#### Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Identify the source encoding”.
+2. Map the decision or procedure in “Compare representative characters”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Export a verified copy” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+#### Supporting posts
+
+Exactly three separate briefs: [posts for M06-S2](). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+#### Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+### Support assignment M06-S3: Distinguish Empty CSV Cells From Missing Fields
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M06-S3",
+ "title": "Distinguish Empty CSV Cells From Missing Fields",
+ "canonical": "https://llmiser.devbehindyou.com/blog/csv-empty-missing-fields",
+ "primary_keyword": "empty CSV cells missing fields",
+ "description": "How do missing delimiters differ from intentionally blank values? See a practical example, checks and limitations.",
+ "intent_key": "csv-empty-missing-fields",
+ "intent": "How do missing delimiters differ from intentionally blank values?",
+ "excludes": "Keep missing-value decisions explicit; do not fill invented values. Main checklist and sibling questions remain with their owners.",
+ "parent_id": "M06",
+ "nearest_ids": [
+ "M06-S1",
+ "M06-S2",
+ "M06"
+ ],
+ "source_refs": [
+ "SRC-CSV",
+ "SRC-LOCAL"
+ ]
+}
+~~~
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M06: 7 Ways to Prepare Cleaner CSV Data for AI](). Metadata: [intent registry](), `M06-S3`.
+
+#### Single reader question
+
+How do missing delimiters differ from intentionally blank values?
+
+#### Outline
+
+1. Define expected columns
+2. Compare blank and absent fields
+3. Validate a reviewed sample
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+#### Original example to produce
+
+Rows with a blank middle cell, missing last field and extra delimiter.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+#### Exclusions and nearest intents
+
+Keep missing-value decisions explicit; do not fill invented values.
+
+The parent owns the general checklist. Related support owners:
+
+- [M06-S1](): How do I verify that quoted separators remain inside a cell?
+- [M06-S2](): How can I diagnose corrupted text before using converted output?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-CSV, SRC-LOCAL. See [sources.json]().
+
+#### Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Define expected columns”.
+2. Map the decision or procedure in “Compare blank and absent fields”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Validate a reviewed sample” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+#### Supporting posts
+
+Exactly three separate briefs: [posts for M06-S3](). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+#### Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+### Support assignment M07-S1: Plan a Batch With Different Supported File Types
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M07-S1",
+ "title": "Plan a Batch With Different Supported File Types",
+ "canonical": "https://llmiser.devbehindyou.com/blog/mixed-file-batch-llmiser",
+ "primary_keyword": "LLMiser mixed file batch",
+ "description": "How do I organize a supported mixed-format batch? See a practical example, checks and limitations.",
+ "intent_key": "mixed-file-batch-llmiser",
+ "intent": "How do I organize a supported mixed-format batch?",
+ "excludes": "Not a worker architecture article; no unsupported formats or uniform-speed promise. Main checklist and sibling questions remain with their owners.",
+ "parent_id": "M07",
+ "nearest_ids": [
+ "M07-S2",
+ "M07-S3",
+ "M07"
+ ],
+ "source_refs": [
+ "SRC-LOCAL"
+ ]
+}
+~~~
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M07: How to Convert Multiple Files With LLMiser](). Metadata: [intent registry](), `M07-S1`.
+
+#### Single reader question
+
+How do I organize a supported mixed-format batch?
+
+#### Outline
+
+1. Check each format against current UI
+2. Group files by review needs
+3. Track each output separately
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+#### Original example to produce
+
+Small PDF, DOCX and image fixture set with identifiable content in each.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+#### Exclusions and nearest intents
+
+Not a worker architecture article; no unsupported formats or uniform-speed promise.
+
+The parent owns the general checklist. Related support owners:
+
+- [M07-S2](): How do I recover when some files finish and others fail?
+- [M07-S3](): How do I plan a batch that meets documented per-file and queue limits?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-LOCAL. See [sources.json]().
+
+#### Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Check each format against current UI”.
+2. Map the decision or procedure in “Group files by review needs”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Track each output separately” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+#### Supporting posts
+
+Exactly three separate briefs: [posts for M07-S1](). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+#### Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+### Support assignment M07-S2: Handle Partial Conversion Failures in a Batch
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M07-S2",
+ "title": "Handle Partial Conversion Failures in a Batch",
+ "canonical": "https://llmiser.devbehindyou.com/blog/partial-batch-conversion",
+ "primary_keyword": "LLMiser partial batch failure",
+ "description": "How do I recover when some files finish and others fail? See a practical example, checks and limitations.",
+ "intent_key": "partial-batch-conversion",
+ "intent": "How do I recover when some files finish and others fail?",
+ "excludes": "Do not create production load; verify retry controls and avoid automatic full-batch reuploads. Main checklist and sibling questions remain with their owners.",
+ "parent_id": "M07",
+ "nearest_ids": [
+ "M07-S1",
+ "M07-S3",
+ "M07"
+ ],
+ "source_refs": [
+ "SRC-LOCAL"
+ ]
+}
+~~~
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M07: How to Convert Multiple Files With LLMiser](). Metadata: [intent registry](), `M07-S2`.
+
+#### Single reader question
+
+How do I recover when some files finish and others fail?
+
+#### Outline
+
+1. Identify completed and failed items
+2. Save successful results
+3. Retry only where current UI supports it
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+#### Original example to produce
+
+One valid document plus an intentionally invalid supported-format fixture in a controlled local/test environment.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+#### Exclusions and nearest intents
+
+Do not create production load; verify retry controls and avoid automatic full-batch reuploads.
+
+The parent owns the general checklist. Related support owners:
+
+- [M07-S1](): How do I organize a supported mixed-format batch?
+- [M07-S3](): How do I plan a batch that meets documented per-file and queue limits?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-LOCAL. See [sources.json]().
+
+#### Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Identify completed and failed items”.
+2. Map the decision or procedure in “Save successful results”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Retry only where current UI supports it” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+#### Supporting posts
+
+Exactly three separate briefs: [posts for M07-S2](). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+#### Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+### Support assignment M07-S3: Split a File Batch Around LLMiser's Upload Limits
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M07-S3",
+ "title": "Split a File Batch Around LLMiser's Upload Limits",
+ "canonical": "https://llmiser.devbehindyou.com/blog/split-batch-upload-limits",
+ "primary_keyword": "LLMiser upload limits batch",
+ "description": "How do I plan a batch that meets documented per-file and queue limits? See a practical example, checks and limitations.",
+ "intent_key": "split-batch-upload-limits",
+ "intent": "How do I plan a batch that meets documented per-file and queue limits?",
+ "excludes": "Do not promise splitting the queue fixes an oversized individual file. Main checklist and sibling questions remain with their owners.",
+ "parent_id": "M07",
+ "nearest_ids": [
+ "M07-S1",
+ "M07-S2",
+ "M07"
+ ],
+ "source_refs": [
+ "SRC-LOCAL"
+ ]
+}
+~~~
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M07: How to Convert Multiple Files With LLMiser](). Metadata: [intent registry](), `M07-S3`.
+
+#### Single reader question
+
+How do I plan a batch that meets documented per-file and queue limits?
+
+#### Outline
+
+1. Read current limits
+2. Separate queue count from file size
+3. Choose a smaller source or batch
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+#### Original example to produce
+
+Local file-size/count inventory and UI validation checks; no oversized production upload necessary.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+#### Exclusions and nearest intents
+
+Do not promise splitting the queue fixes an oversized individual file.
+
+The parent owns the general checklist. Related support owners:
+
+- [M07-S1](): How do I organize a supported mixed-format batch?
+- [M07-S2](): How do I recover when some files finish and others fail?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-LOCAL. See [sources.json]().
+
+#### Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Read current limits”.
+2. Map the decision or procedure in “Separate queue count from file size”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Choose a smaller source or batch” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+#### Supporting posts
+
+Exactly three separate briefs: [posts for M07-S3](). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+#### Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+### Support assignment M08-S1: Standard vs Clean: Compare LLMiser Output
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M08-S1",
+ "title": "Standard vs Clean: Compare LLMiser Output",
+ "canonical": "https://llmiser.devbehindyou.com/blog/llmiser-standard-vs-clean",
+ "primary_keyword": "LLMiser Standard vs Clean",
+ "description": "What changes between Standard and Clean for the same input? See a practical example, checks and limitations.",
+ "intent_key": "llmiser-standard-vs-clean",
+ "intent": "What changes between Standard and Clean for the same input?",
+ "excludes": "Do not claim semantic cleanup, deduplication or privacy sanitization. Main checklist and sibling questions remain with their owners.",
+ "parent_id": "M08",
+ "nearest_ids": [
+ "M08-S2",
+ "M08-S3",
+ "M08"
+ ],
+ "source_refs": [
+ "SRC-LOCAL",
+ "SRC-MARKDOWN"
+ ]
+}
+~~~
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M08: LLMiser Profiles: Standard, Clean, Compact, RAG-ready](). Metadata: [intent registry](), `M08-S1`.
+
+#### Single reader question
+
+What changes between Standard and Clean for the same input?
+
+#### Outline
+
+1. Use one fixture
+2. Compare source line and whitespace
+3. Check content retained
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+#### Original example to produce
+
+Same short Markdown/document input under both profiles, saved as an actual diff.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+#### Exclusions and nearest intents
+
+Do not claim semantic cleanup, deduplication or privacy sanitization.
+
+The parent owns the general checklist. Related support owners:
+
+- [M08-S2](): What needs checking when compact formatting removes separators or spacing?
+- [M08-S3](): What does a chunk-boundary marker communicate and what does it not do?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-LOCAL, SRC-MARKDOWN. See [sources.json]().
+
+#### Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Use one fixture”.
+2. Map the decision or procedure in “Compare source line and whitespace”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Check content retained” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+#### Supporting posts
+
+Exactly three separate briefs: [posts for M08-S1](). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+#### Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+### Support assignment M08-S2: Check Compact Markdown Before You Use It
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M08-S2",
+ "title": "Check Compact Markdown Before You Use It",
+ "canonical": "https://llmiser.devbehindyou.com/blog/llmiser-compact-markdown-check",
+ "primary_keyword": "LLMiser Compact Markdown",
+ "description": "What needs checking when compact formatting removes separators or spacing? See a practical example, checks and limitations.",
+ "intent_key": "llmiser-compact-markdown-check",
+ "intent": "What needs checking when compact formatting removes separators or spacing?",
+ "excludes": "No assumed token savings or universally valid table preservation; record unexpected changes. Main checklist and sibling questions remain with their owners.",
+ "parent_id": "M08",
+ "nearest_ids": [
+ "M08-S1",
+ "M08-S3",
+ "M08"
+ ],
+ "source_refs": [
+ "SRC-LOCAL",
+ "SRC-MARKDOWN"
+ ]
+}
+~~~
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M08: LLMiser Profiles: Standard, Clean, Compact, RAG-ready](). Metadata: [intent registry](), `M08-S2`.
+
+#### Single reader question
+
+What needs checking when compact formatting removes separators or spacing?
+
+#### Outline
+
+1. Inspect the actual transformations
+2. Check structure-sensitive content
+3. Choose readability versus compactness
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+#### Original example to produce
+
+Fixture with blank lines, horizontal rules, table syntax and hyphen sequences; compare all bytes.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+#### Exclusions and nearest intents
+
+No assumed token savings or universally valid table preservation; record unexpected changes.
+
+The parent owns the general checklist. Related support owners:
+
+- [M08-S1](): What changes between Standard and Clean for the same input?
+- [M08-S3](): What does a chunk-boundary marker communicate and what does it not do?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-LOCAL, SRC-MARKDOWN. See [sources.json]().
+
+#### Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Inspect the actual transformations”.
+2. Map the decision or procedure in “Check structure-sensitive content”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Choose readability versus compactness” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+#### Supporting posts
+
+Exactly three separate briefs: [posts for M08-S2](). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+#### Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+### Support assignment M08-S3: What LLMiser's RAG-ready Markers Do
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M08-S3",
+ "title": "What LLMiser's RAG-ready Markers Do",
+ "canonical": "https://llmiser.devbehindyou.com/blog/llmiser-rag-ready-markers",
+ "primary_keyword": "LLMiser RAG-ready markers",
+ "description": "What does a chunk-boundary marker communicate and what does it not do? See a practical example, checks and limitations.",
+ "intent_key": "llmiser-rag-ready-markers",
+ "intent": "What does a chunk-boundary marker communicate and what does it not do?",
+ "excludes": "No embedding/retrieval service or semantic chunking guarantee; heed existing E08 code audit. Main checklist and sibling questions remain with their owners.",
+ "parent_id": "M08",
+ "nearest_ids": [
+ "M08-S1",
+ "M08-S2",
+ "M08"
+ ],
+ "source_refs": [
+ "SRC-LOCAL",
+ "SRC-MARKDOWN"
+ ]
+}
+~~~
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M08: LLMiser Profiles: Standard, Clean, Compact, RAG-ready](). Metadata: [intent registry](), `M08-S3`.
+
+#### Single reader question
+
+What does a chunk-boundary marker communicate and what does it not do?
+
+#### Outline
+
+1. Locate markers in real output
+2. Explain heading alignment
+3. Separate markers from downstream splitting
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+#### Original example to produce
+
+Fixture with H1/H2/H3 and fenced text; inspect marker placement without publishing a fragile splitter.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+#### Exclusions and nearest intents
+
+No embedding/retrieval service or semantic chunking guarantee; heed existing E08 code audit.
+
+The parent owns the general checklist. Related support owners:
+
+- [M08-S1](): What changes between Standard and Clean for the same input?
+- [M08-S2](): What needs checking when compact formatting removes separators or spacing?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-LOCAL, SRC-MARKDOWN. See [sources.json]().
+
+#### Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Locate markers in real output”.
+2. Map the decision or procedure in “Explain heading alignment”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Separate markers from downstream splitting” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+#### Supporting posts
+
+Exactly three separate briefs: [posts for M08-S3](). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+#### Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+### Support assignment M09-S1: Original or Edited Markdown: Which File Are You Saving?
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M09-S1",
+ "title": "Original or Edited Markdown: Which File Are You Saving?",
+ "canonical": "https://llmiser.devbehindyou.com/blog/original-edited-markdown",
+ "primary_keyword": "LLMiser original versus edited Markdown",
+ "description": "How can I tell whether an export includes my edits? See a practical example, checks and limitations.",
+ "intent_key": "original-edited-markdown",
+ "intent": "How can I tell whether an export includes my edits?",
+ "excludes": "Verify each action in current UI; do not assume edits persist across refresh or recovery. Main checklist and sibling questions remain with their owners.",
+ "parent_id": "M09",
+ "nearest_ids": [
+ "M09-S2",
+ "M09-S3",
+ "M09"
+ ],
+ "source_refs": [
+ "SRC-LOCAL",
+ "SRC-MARKDOWN"
+ ]
+}
+~~~
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M09: How to Edit and Export Markdown With LLMiser](). Metadata: [intent registry](), `M09-S1`.
+
+#### Single reader question
+
+How can I tell whether an export includes my edits?
+
+#### Outline
+
+1. Identify source result and editor state
+2. Make a harmless visible edit
+3. Compare saved outputs
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+#### Original example to produce
+
+Tiny fixture with a unique marker inserted in editor; compare copy/download/recovery behavior.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+#### Exclusions and nearest intents
+
+Verify each action in current UI; do not assume edits persist across refresh or recovery.
+
+The parent owns the general checklist. Related support owners:
+
+- [M09-S2](): How do I distinguish a limited rendering view from incomplete output?
+- [M09-S3](): What should I check after moving Markdown to another app?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-LOCAL, SRC-MARKDOWN. See [sources.json]().
+
+#### Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Identify source result and editor state”.
+2. Map the decision or procedure in “Make a harmless visible edit”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Compare saved outputs” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+#### Supporting posts
+
+Exactly three separate briefs: [posts for M09-S1](). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+#### Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+### Support assignment M09-S2: Check Long Markdown Beyond the Preview
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M09-S2",
+ "title": "Check Long Markdown Beyond the Preview",
+ "canonical": "https://llmiser.devbehindyou.com/blog/long-markdown-preview",
+ "primary_keyword": "LLMiser long Markdown preview",
+ "description": "How do I distinguish a limited rendering view from incomplete output? See a practical example, checks and limitations.",
+ "intent_key": "long-markdown-preview",
+ "intent": "How do I distinguish a limited rendering view from incomplete output?",
+ "excludes": "No current size threshold claim without code/UI verification; missing content must be reported. Main checklist and sibling questions remain with their owners.",
+ "parent_id": "M09",
+ "nearest_ids": [
+ "M09-S1",
+ "M09-S3",
+ "M09"
+ ],
+ "source_refs": [
+ "SRC-LOCAL",
+ "SRC-MARKDOWN"
+ ]
+}
+~~~
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M09: How to Edit and Export Markdown With LLMiser](). Metadata: [intent registry](), `M09-S2`.
+
+#### Single reader question
+
+How do I distinguish a limited rendering view from incomplete output?
+
+#### Outline
+
+1. Identify the preview mode
+2. Locate start middle and end
+3. Compare raw export coverage
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+#### Original example to produce
+
+Synthetic long text with markers at start, middle and end; inspect current preview/export behavior.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+#### Exclusions and nearest intents
+
+No current size threshold claim without code/UI verification; missing content must be reported.
+
+The parent owns the general checklist. Related support owners:
+
+- [M09-S1](): How can I tell whether an export includes my edits?
+- [M09-S3](): What should I check after moving Markdown to another app?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-LOCAL, SRC-MARKDOWN. See [sources.json]().
+
+#### Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Identify the preview mode”.
+2. Map the decision or procedure in “Locate start middle and end”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Compare raw export coverage” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+#### Supporting posts
+
+Exactly three separate briefs: [posts for M09-S2](). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+#### Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+### Support assignment M09-S3: Copy or Download Markdown: Check the Result
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M09-S3",
+ "title": "Copy or Download Markdown: Check the Result",
+ "canonical": "https://llmiser.devbehindyou.com/blog/copy-download-markdown",
+ "primary_keyword": "LLMiser copy versus download",
+ "description": "What should I check after moving Markdown to another app? See a practical example, checks and limitations.",
+ "intent_key": "copy-download-markdown",
+ "intent": "What should I check after moving Markdown to another app?",
+ "excludes": "Destination apps may reformat; no promise of every platform preserving Markdown. Main checklist and sibling questions remain with their owners.",
+ "parent_id": "M09",
+ "nearest_ids": [
+ "M09-S1",
+ "M09-S2",
+ "M09"
+ ],
+ "source_refs": [
+ "SRC-LOCAL",
+ "SRC-MARKDOWN"
+ ]
+}
+~~~
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M09: How to Edit and Export Markdown With LLMiser](). Metadata: [intent registry](), `M09-S3`.
+
+#### Single reader question
+
+What should I check after moving Markdown to another app?
+
+#### Outline
+
+1. Choose clipboard or file transfer
+2. Check characters and code fences
+3. Compare the destination with saved text
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+#### Original example to produce
+
+Small Unicode, pipe-table and fenced-code fixture copied to a plain text editor and downloaded.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+#### Exclusions and nearest intents
+
+Destination apps may reformat; no promise of every platform preserving Markdown.
+
+The parent owns the general checklist. Related support owners:
+
+- [M09-S1](): How can I tell whether an export includes my edits?
+- [M09-S2](): How do I distinguish a limited rendering view from incomplete output?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-LOCAL, SRC-MARKDOWN. See [sources.json]().
+
+#### Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Choose clipboard or file transfer”.
+2. Map the decision or procedure in “Check characters and code fences”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Compare the destination with saved text” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+#### Supporting posts
+
+Exactly three separate briefs: [posts for M09-S3](). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+#### Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+### Support assignment M10-S1: Find Relevant Files in PROJECT_INDEX.md
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M10-S1",
+ "title": "Find Relevant Files in PROJECT_INDEX.md",
+ "canonical": "https://llmiser.devbehindyou.com/blog/read-project-index-paths",
+ "primary_keyword": "LLMiser project index paths",
+ "description": "How do source paths help locate the right converted file? See a practical example, checks and limitations.",
+ "intent_key": "read-project-index-paths",
+ "intent": "How do source paths help locate the right converted file?",
+ "excludes": "Use actual current index format; no invented links or schema fields. Main checklist and sibling questions remain with their owners.",
+ "parent_id": "M10",
+ "nearest_ids": [
+ "M10-S2",
+ "M10-S3",
+ "M10"
+ ],
+ "source_refs": [
+ "SRC-LOCAL"
+ ]
+}
+~~~
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M10: How to Read LLMiser's ZIP Index and Manifest](). Metadata: [intent registry](), `M10-S1`.
+
+#### Single reader question
+
+How do source paths help locate the right converted file?
+
+#### Outline
+
+1. Read the actual index layout
+2. Distinguish repeated basenames
+3. Find the corresponding content
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+#### Original example to produce
+
+ZIP with src/config.txt and docs/config.txt containing different text; inspect index and combined output.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+#### Exclusions and nearest intents
+
+Use actual current index format; no invented links or schema fields.
+
+The parent owns the general checklist. Related support owners:
+
+- [M10-S2](): How do I account for every intended source item after conversion?
+- [M10-S3](): How do I distinguish an intentional exclusion from a conversion omission?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-LOCAL. See [sources.json]().
+
+#### Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Read the actual index layout”.
+2. Map the decision or procedure in “Distinguish repeated basenames”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Find the corresponding content” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+#### Supporting posts
+
+Exactly three separate briefs: [posts for M10-S1](). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+#### Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+### Support assignment M10-S2: Reconcile a ZIP Manifest With Your Source Files
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M10-S2",
+ "title": "Reconcile a ZIP Manifest With Your Source Files",
+ "canonical": "https://llmiser.devbehindyou.com/blog/reconcile-zip-manifest",
+ "primary_keyword": "LLMiser manifest completeness",
+ "description": "How do I account for every intended source item after conversion? See a practical example, checks and limitations.",
+ "intent_key": "reconcile-zip-manifest",
+ "intent": "How do I account for every intended source item after conversion?",
+ "excludes": "Never infer that every source was converted from a successful overall status. Main checklist and sibling questions remain with their owners.",
+ "parent_id": "M10",
+ "nearest_ids": [
+ "M10-S1",
+ "M10-S3",
+ "M10"
+ ],
+ "source_refs": [
+ "SRC-LOCAL"
+ ]
+}
+~~~
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M10: How to Read LLMiser's ZIP Index and Manifest](). Metadata: [intent registry](), `M10-S2`.
+
+#### Single reader question
+
+How do I account for every intended source item after conversion?
+
+#### Outline
+
+1. Create an expected inventory
+2. Read actual outcome fields
+3. Reconcile counts and unresolved items
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+#### Original example to produce
+
+Tiny ZIP inventory with valid supported entries and a deliberately unsupported harmless item; save actual manifest.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+#### Exclusions and nearest intents
+
+Never infer that every source was converted from a successful overall status.
+
+The parent owns the general checklist. Related support owners:
+
+- [M10-S1](): How do source paths help locate the right converted file?
+- [M10-S3](): How do I distinguish an intentional exclusion from a conversion omission?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-LOCAL. See [sources.json]().
+
+#### Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Create an expected inventory”.
+2. Map the decision or procedure in “Read actual outcome fields”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Reconcile counts and unresolved items” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+#### Supporting posts
+
+Exactly three separate briefs: [posts for M10-S2](). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+#### Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+### Support assignment M10-S3: Investigate Missing Content in a ZIP Conversion
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M10-S3",
+ "title": "Investigate Missing Content in a ZIP Conversion",
+ "canonical": "https://llmiser.devbehindyou.com/blog/missing-zip-conversion-content",
+ "primary_keyword": "LLMiser missing ZIP content",
+ "description": "How do I distinguish an intentional exclusion from a conversion omission? See a practical example, checks and limitations.",
+ "intent_key": "missing-zip-conversion-content",
+ "intent": "How do I distinguish an intentional exclusion from a conversion omission?",
+ "excludes": "Do not claim all nested ZIPs are expanded or recommend bypassing limits; separate from pre-upload exclusions in M01. Main checklist and sibling questions remain with their owners.",
+ "parent_id": "M10",
+ "nearest_ids": [
+ "M10-S1",
+ "M10-S2",
+ "M10"
+ ],
+ "source_refs": [
+ "SRC-LOCAL"
+ ]
+}
+~~~
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M10: How to Read LLMiser's ZIP Index and Manifest](). Metadata: [intent registry](), `M10-S3`.
+
+#### Single reader question
+
+How do I distinguish an intentional exclusion from a conversion omission?
+
+#### Outline
+
+1. Locate the expected entry
+2. Inspect reported restrictions or outcomes
+3. Retry a permitted small source separately
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+#### Original example to produce
+
+Controlled nested-archive or unsupported-entry fixture with documented limits; inspect actual result.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+#### Exclusions and nearest intents
+
+Do not claim all nested ZIPs are expanded or recommend bypassing limits; separate from pre-upload exclusions in M01.
+
+The parent owns the general checklist. Related support owners:
+
+- [M10-S1](): How do source paths help locate the right converted file?
+- [M10-S2](): How do I account for every intended source item after conversion?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-LOCAL. See [sources.json]().
+
+#### Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Locate the expected entry”.
+2. Map the decision or procedure in “Inspect reported restrictions or outcomes”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Retry a permitted small source separately” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+#### Supporting posts
+
+Exactly three separate briefs: [posts for M10-S3](). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+#### Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+### Support assignment M11-S1: Recognize Instructions Inside an Untrusted Document
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M11-S1",
+ "title": "Recognize Instructions Inside an Untrusted Document",
+ "canonical": "https://llmiser.devbehindyou.com/blog/untrusted-document-instructions",
+ "primary_keyword": "untrusted document instructions",
+ "description": "How do I recognize source text attempting to redirect the task? See a practical example, checks and limitations.",
+ "intent_key": "untrusted-document-instructions",
+ "intent": "How do I recognize source text attempting to redirect the task?",
+ "excludes": "Recognition is not proof of detection completeness; cite OWASP and do not execute embedded commands. Main checklist and sibling questions remain with their owners.",
+ "parent_id": "M11",
+ "nearest_ids": [
+ "M11-S2",
+ "M11-S3",
+ "M11"
+ ],
+ "source_refs": [
+ "SRC-OWASP",
+ "SRC-INJECTION"
+ ]
+}
+~~~
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M11: Prompt Injection: Can a Document Hijack Your AI?](). Metadata: [intent registry](), `M11-S1`.
+
+#### Single reader question
+
+How do I recognize source text attempting to redirect the task?
+
+#### Outline
+
+1. Separate user task from source claims
+2. Identify role-like imperatives
+3. Treat suspicious passages as quoted evidence
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+#### Original example to produce
+
+Inert local excerpt asking for an unrelated summary style, clearly labeled illustrative; no secret extraction or live attack.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+#### Exclusions and nearest intents
+
+Recognition is not proof of detection completeness; cite OWASP and do not execute embedded commands.
+
+The parent owns the general checklist. Related support owners:
+
+- [M11-S2](): Why can an instruction attempt survive a change of file format?
+- [M11-S3](): What should a reader check before allowing actions derived from a document?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-OWASP, SRC-INJECTION. See [sources.json]().
+
+#### Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Separate user task from source claims”.
+2. Map the decision or procedure in “Identify role-like imperatives”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Treat suspicious passages as quoted evidence” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+#### Supporting posts
+
+Exactly three separate briefs: [posts for M11-S1](). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+#### Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+### Support assignment M11-S2: Why Markdown Conversion Does Not Remove Prompt Injection
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M11-S2",
+ "title": "Why Markdown Conversion Does Not Remove Prompt Injection",
+ "canonical": "https://llmiser.devbehindyou.com/blog/markdown-conversion-prompt-injection",
+ "primary_keyword": "Markdown conversion prompt injection",
+ "description": "Why can an instruction attempt survive a change of file format? See a practical example, checks and limitations.",
+ "intent_key": "markdown-conversion-prompt-injection",
+ "intent": "Why can an instruction attempt survive a change of file format?",
+ "excludes": "No claim conversion is a sanitizer or that keyword removal is a complete defense. Main checklist and sibling questions remain with their owners.",
+ "parent_id": "M11",
+ "nearest_ids": [
+ "M11-S1",
+ "M11-S3",
+ "M11"
+ ],
+ "source_refs": [
+ "SRC-OWASP",
+ "SRC-INJECTION"
+ ]
+}
+~~~
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M11: Prompt Injection: Can a Document Hijack Your AI?](). Metadata: [intent registry](), `M11-S2`.
+
+#### Single reader question
+
+Why can an instruction attempt survive a change of file format?
+
+#### Outline
+
+1. Trace source text into Markdown
+2. Separate formatting from trust
+3. Describe downstream review and permissions
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+#### Original example to produce
+
+Harmless imperative preserved through an original text/document conversion; inspect strings only.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+#### Exclusions and nearest intents
+
+No claim conversion is a sanitizer or that keyword removal is a complete defense.
+
+The parent owns the general checklist. Related support owners:
+
+- [M11-S1](): How do I recognize source text attempting to redirect the task?
+- [M11-S3](): What should a reader check before allowing actions derived from a document?
+
+If the same test answers a sibling question, share the fixture but separate the conclusion. Do not retell a generic conversion tutorial three times. Source IDs: SRC-OWASP, SRC-INJECTION. See [sources.json]().
+
+#### Visuals
+
+Banner: a single visual of the problem in the title. Four figure concepts:
+
+1. Annotate the input associated with “Trace source text into Markdown”.
+2. Map the decision or procedure in “Separate formatting from trust”.
+3. Show the actual fixture comparison, including failures if found.
+4. Turn “Describe downstream review and permissions” into a review checklist with the limitation stated.
+
+No measured-looking bars or numeric claims unless the sample produces real evidence.
+
+#### Supporting posts
+
+Exactly three separate briefs: [posts for M11-S2](). Channel suggestions are not account selections. The posts use this support URL, not a competing article or an unneeded intermediate site. Publish only after the final article exists and the active user instruction authorizes posting.
+
+#### Internal links
+
+Link back to the parent where it gives broader context. Link a sibling only if its separate question matters. Follow the keyword ownership and scope boundaries; do not add all sibling titles as a keyword block.
+
+### Support assignment M11-S3: Review AI Actions After Reading External Documents
+
+Proposed metadata and scope:
+
+~~~json
+{
+ "id": "M11-S3",
+ "title": "Review AI Actions After Reading External Documents",
+ "canonical": "https://llmiser.devbehindyou.com/blog/ai-actions-external-documents",
+ "primary_keyword": "AI actions from external documents",
+ "description": "What should a reader check before allowing actions derived from a document? See a practical example, checks and limitations.",
+ "intent_key": "ai-actions-external-documents",
+ "intent": "What should a reader check before allowing actions derived from a document?",
+ "excludes": "Stay defensive; LLMiser does not enforce downstream tool permissions. Main checklist and sibling questions remain with their owners.",
+ "parent_id": "M11",
+ "nearest_ids": [
+ "M11-S1",
+ "M11-S2",
+ "M11"
+ ],
+ "source_refs": [
+ "SRC-OWASP",
+ "SRC-INJECTION"
+ ]
+}
+~~~
+
+Support topic: PROPOSED. No article draft, fixture outcome or publication is claimed.
+
+Parent: [M11: Prompt Injection: Can a Document Hijack Your AI?](). Metadata: [intent registry](), `M11-S3`.
+
+#### Single reader question
+
+What should a reader check before allowing actions derived from a document?
+
+#### Outline
+
+1. Identify the requested action
+2. Trace it to user authorization
+3. Review tool permissions and proposed effects
+
+Start with the answer and applicability, expand the procedure around this one question, show a concrete example, then summarize what still needs manual review. FAQs must address actual unanswered details, not repeat the main article.
+
+#### Original example to produce
+
+Paper exercise comparing summarize-only task with a source requesting an external action; no messages sent.
+
+Record expected versus observed behavior separately. Save the unmodified original, reviewed copy and exact output privately. Never turn this proposed fixture into a claim of completed testing.
+
+#### Exclusions and nearest intents
+
+Stay defensive; LLMiser does not enforce downstream tool permissions.
+
+The parent owns the general checklist. Related support owners:
+
+- [M11-S1](