Spec · pre-publish guardrails
The 6 guardrails 5 deterministic + 1 LLM-judged factuality
Every council output passes through 6 pre-publish checks before it can reach a customer's review queue. Five are deterministic (regex / structural / cosine-similarity / live HEAD requests) so the LLM critic cannot rubber-stamp a sycophantic pass. One is LLM-graded but the GATE is the cite-result, not the LLM's confidence. Hard-fail on any of these quarantines the piece — it never silently publishes.
Hard fails are not errors to hide. They appear in the customer's review queue with the exact failure reason and a one-click Regenerate with feedback button that carries the failure context into the next council pass. This is how approval-required by default works: drafts land for human review with a visible gate certificate; auto-publish unlocks per content type after 30 days of clean, inspectable history with zero hard guardrail failures.
Plagiarism check
deterministicWhat it checks
Compares the rewrite against the source HTML at an 8-word sliding window. Strips HTML tags from the source first.
Hard-fail triggers
Any 8-word phrase from the rewrite appears verbatim in the source (case-insensitive, whitespace-normalized).
What you see in the queue
Headline 'Plagiarism check failed' + count of verbatim n-word matches + up to 5 sample matches.
Regenerate-with-feedback
The previous rewrite reused N-word phrase(s) verbatim from the source. Rephrase those passages so no consecutive 8-word run matches the original.
Brand voice drift
deterministicWhat it checks
Computes a 1024-dim multilingual embedding of the rewrite locally on private GPU, compares cosine similarity against the brand-voice profile embedding. No third-party embedding service touches your corpus.
Hard-fail triggers
Cosine similarity drops below 0.78. Vacuous-pass if no brand profile is supplied; degraded-pass if the local embedding service is unavailable.
What you see in the queue
Cosine score + threshold. 'The rewrite's tone diverged from your brand voice profile.'
Regenerate-with-feedback
Match the rhythm, vocabulary, and emphasis of your existing approved copy.
Required-field check
deterministicWhat it checks
Checks required fields and length bounds for the content type. Defaults: product_listing → title 30-80 chars, meta 110-165 chars, body ≥80 words. SEO article → title required, body ≥300 words.
Hard-fail triggers
Any required field is missing OR any length bound is violated.
What you see in the queue
Itemized list of which field/length failed.
Regenerate-with-feedback
Address the missing fields / length bounds listed below.
Restricted-claim language
deterministicWhat it checks
Regex blocklist for medical, legal, and financial overclaims (cures cancer, FDA-approved without filing, 100% effective, lose-N-lbs-in-N-days, SEC-registered, etc.). Caller can extend per-account.
Hard-fail triggers
Any regex pattern hits. Severity escalates to 'critical' if any matched pattern is itself critical (medical-treatment claims, securities claims).
What you see in the queue
List of matched phrases + severity per match + why each is restricted.
Regenerate-with-feedback
Remove or substantiate the restricted-claim phrasing flagged below.
Broken link check
deterministicWhat it checks
Extracts every URL from the rewrite (cap 8 links) and HEADs each. Falls back to GET on HEAD-rejecting servers. 6s timeout per link, follows redirects.
Hard-fail triggers
Any link returns 4xx/5xx OR exceeds the timeout.
What you see in the queue
List of broken URLs + status code or error class.
Regenerate-with-feedback
Drop or correct the URLs that returned errors.
Factuality / invented-numbers check
LLM-gradedWhat it checks
Soft check: extracts every standalone number from the rewrite (1-4 digit, optional decimal) and verifies each appears in the supplied extracted_facts dict. Vacuous-pass if no extracted_facts provided; pass if fewer than 3 unique invented numbers (single-number drift may be a year reference).
Hard-fail triggers
3+ unique numbers in the rewrite are not present in the extracted_facts dict (e.g., invented battery life, certifications, durations, dimensions).
What you see in the queue
Up to 8 invented numeric values flagged.
Regenerate-with-feedback
Use only the extracted facts — do not invent specs, certifications, or numbers.
Want to see this in action on your URL?
Run the free audit. Same council, same guardrails, same per-step trace — no signup.
Run my free audit →