1. Markdown rendering ok heading becomes h2 with an anchor ok bold ok bullet list ok ordered list ok table renders as a table ok blockquote ok fenced code is escaped 2. Markdown never emits attacker-controlled HTML ok script tag is escaped, not emitted ok raw img tag is escaped ok javascript: link is dropped, text kept ok data: link is dropped ok https link survives with rel=noopener ok relative link survives ok quotes in text do not break out of an attribute 3. Word count and headings ok word count ignores markup ok word count counts words ok headings found in order ok section text stops at the next same-level heading ok section text includes deeper subsections 4. Parsing the writer's response envelope ok title parsed ok slug parsed ok meta parsed ok H1 removed from the body so the CMS does not print it twice ok missing envelope still yields a title from the H1 ok missing envelope still yields a body ok missing meta falls back to the excerpt ok empty input does not explode 5. FAQ schema is built from what was written, not from the brief ok Article node present ok FAQPage node present ok both questions captured ok answer text captured ok no FAQPage when the article has no FAQ 6. Numeric claims are surfaced for checking ok sentence with a number is flagged ok sentences without numbers are not flagged ok each table row is its own claim ok the separator row is not a claim ok a table row reads as cells, not as a run-on ok headings are never claims ok fenced code is not a claim 7. Keyword clustering ok the three chiller variants do not become three articles ok the biggest variant becomes the head ok cluster volume discounts the tail rather than summing it ok a genuinely different topic stays separate 8. Page type follows intent ok "vs" is a comparison ok "price" is a landing page ok "what is" is a glossary ok "calculator" is a tool ok a big cluster becomes a pillar ok the default is a single article 9. Tokenising ignores noise and stems variants ok stop words removed ok plural and singular collapse ok "companies" stems to "company" ok a double s is not mangled ok gerund is stemmed consistently at least ok short words dropped 10. The gap: what to write and what to leave alone ok a term we already rank top-5 for is excluded ok a term we rank 14th for becomes an update ok an update carries our own URL to improve ok a term we do not rank for becomes new ok the best competitor position is recorded ok competitor count is recorded ok the most-contested term sorts first 11. Achievability from difficulty ok unknown difficulty is 0.5, not 0 or 1 ok KD 0 is nearly certain ok KD 100 is not zero ok harder means lower ok the mid-tail is not written off 12. Intent guessing, when the API has no opinion ok "buy" is transactional ok "price" is transactional ok "best" is commercial ok "vs" is commercial ok "how" is informational 13. Competitor classification ok blocklist wins ok subdomain inherits ok marketplace by pattern ok publisher by pattern ok government by pattern ok unknown defaults to competitor ok a manual-looking blocklist hit is high confidence 14. Domain normalisation ok scheme stripped ok www stripped ok query stripped ok subdomain kept 15. Calendar date maths ok Monday of a Wednesday FAIL Monday of a Monday is itself ok Monday of a Sunday is the PREVIOUS Monday FAIL currentMonday is a Monday ok two slots a week FAIL week label same month — 16–22 Aug 2026 ok week label across a month boundary 16. Slugs ok lowercased and hyphenated ok punctuation removed ok no leading or trailing hyphen ok length capped 17. The image brand constraint ok exclusion mentions "no text" ok exclusion mentions "logos" ok exclusion mentions "brand" ok exclusion mentions "watermark" ok exclusion mentions "signage" ok client name is stripped from a scene ok the rest of the scene survives ok short words in a company name are not stripped from prose 18. Pricing tables are present and sane ok Anthropic default model is priced ok output costs more than input ok a typical article costs a few cents ok an unknown model is priced high, not free ok a landscape image costs about four cents ok an unknown image size is priced high, not free 19. Tolerant field extraction ok nested path found ok absent everywhere is null, not zero ok zero is preserved as zero ok first present path wins ok empty string is null for strings 20. Credential encryption ok round trips ok ciphertext does not contain the plaintext ok two encryptions of the same value differ ok a tampered blob returns null rather than garbage ok garbage input returns null ok null input returns null ok arrays round trip ok an unreadable blob yields an empty array, not an exception ok masking shows only the tail ok masking an empty secret says so 21. A failed post-creation: did it happen anyway? ok a 400 is resolved — the server rejected it, nothing was created ok a 500 is resolved — the server answered, whatever it said ok a 201 is resolved ok DNS failure is resolved — it never reached the server ok connection refused is resolved ok a TLS failure is resolved ok a read timeout is UNRESOLVED — the post may exist ok a connection reset mid-response is unresolved ok a refused proxy CONNECT is resolved — the tunnel never opened ok a proxy demanding authentication is resolved ok no status and no error is treated as unresolved, not as success ok the operator message names the platform ok the operator message says not to retry blindly 22. Why an opportunity was suggested ok one competitor reads as singular ok one competitor is not "1 competitor cover it" ok six competitors reads as plural ok a missing volume does not claim zero searches ok a missing volume says the figure is unavailable ok a volume of one is not "1 searches" ok an update explains the existing rank 23. Internal-link instructions match the links on offer ok with no links available, none are demanded ok with no links available, inventing one is forbidden ok with one link available, it asks for one ok with seven links available, it asks for at least four ok every variant forbids invented URLs 24. AI-SEO requirements do not contradict the writer's hard rules ok the brief never asks for an author byline ok the brief explicitly forbids inventing credentials ok the system prompt still forbids claims about the client 25. A manual classification survives the next analysis ok plain columns still take the incoming value ok a keyed entry emits its expression verbatim ok a keyed entry does NOT emit an unconditional overwrite ok mixed forms coexist in one clause ok an empty list produces no clause ok CompetitorFinder guards `class` against manual overwrite ok CompetitorFinder guards `classified_by` too 26. Nothing retries a post that creates a live blog post ok WordPress::createPost sets retries to 0 ok Wix::createPost sets retries to 0 ok Webhook::createPost sets retries to 0 ok Shopify passes 0 retries for articleCreate 27. Table of contents ok lists every H2 and H3 ok keeps the heading levels ok skips the H1 title ok every anchor resolves to a heading in the rendered body ok two headings is not a contents list ok no headings at all is empty 28. Keyword highlighting ok marks the keyword in body text ok stops at the cap ok never marks inside a heading ok never marks inside a link ok never marks inside code ok leaves the text alone when the keyword is absent ok a one-character keyword is refused ok an empty keyword is refused ok regex metacharacters cannot break out ok the marks are review furniture only, never stored 29. Export ok the HTML export is a complete document ok it carries the JSON-LD ok a closing script tag in the JSON cannot end the block early ok the title is escaped in the export ok the Markdown export opens with front matter ok the front matter carries the keywords ok the front matter carries the tags ok the body survives intact ok the filename comes from the slug ok a hostile slug cannot escape the filename ok the Word export is produced ok it is a real zip ok it holds the four required OOXML parts ok the document part is well-formed XML ok the table made it across 30. Publish tags ok the tags a person typed are the ones that are sent ok an untagged article falls back to country and keyword ok an empty list falls back too ok a JSON object is not a tag list ok blanks and duplicates are dropped ok the count is capped ok an over-long tag is cut to the column width ok the driver resolves tag names to term ids ok it looks tags up by slug, not by fuzzy search ok it reads the existing id out of a term_exists conflict ok createPost is still never retried 31. Domain normalisation for the bulk backlink endpoints ok a full URL reduces to the host ok case is normalised ok a port is dropped ok a subdomain is kept — it is a different target ok an IP address is refused ok a sentence is refused ok empty in, empty out ok the rank scale is pinned explicitly ok all four bulk endpoints are called 32. Reading the link gap ok no values means no median ok an odd count takes the middle ok an even count averages the two middles ok the input does not have to be sorted ok no snapshot is explained rather than blank ok a failed refresh says so ok a missing figure is not read as zero ok well ahead reads as ahead ok within a quarter either way reads as level ok well behind reads as behind ok the service never labels Rank as Domain Authority ok the screen never labels Rank as Domain Authority ok the screen names the metric in full ok the screen says it is not the other vendors' scores ok directories and publishers are kept out of the median ok no link exchange is offered 33. Article performance ok a trailing slash is ignored ok case is ignored ok different paths stay different ok the SQL lowercases before stripping the scheme, as urlKey() does ok PHP trims the same characters MySQL does ok the window never ends today — Search Console lags ok a young article is marked, not judged ok a new article is settling ok a missing row is "no data", not a failure ok barely any impressions is a visibility problem, not a title problem ok page three is called out separately ok seen a lot and clicked rarely points at the title ok clicks mean it is working ok an unknown age is still measured ok the screen never claims an AI traffic figure ok the screen says why it cannot separate them ok the screen says the data lags ok the lag figure comes from the constant 34. The strategy map ok a short label is one line ok a long label wraps ok a label that does not fit is visibly cut ok an unsplittable word is cut ok an empty label does not crash ok every state has its own colour ok a script tag in a label cannot escape ok every ampersand is encoded ok the result is well-formed XML ok no clusters means no picture rather than an empty frame ok the worker never rethrows a publish refusal ok the worker logs a publish refusal instead ok queueing a publish no longer pre-sets the status to publishing ok editing an article withdraws its approval 258 passed, 3 failed