When the truth audit FAILs your site — and how to fix it without gutting the local flavour
- sites/septic-pumping-shelby-nc/.pipeline/truth-pack.md
- pipeline/scripts/enrich-wikifull.mjs
- 4 audit rounds: ~40 → 15 → 2 → PASS
What you're doing and why
Every site the engine writes gets audited by a different AI than the one that wrote it, before it may be indexed. The auditor reads your page copy next to the actual research evidence and fails anything it can't prove: invented prices, named landmarks that aren't in the sources, "most homes here…" claims, wrong populations. A FAIL pauses the site — it stays live as a preview but is never submitted for indexing — until the copy is honest. This is the gate that keeps a portfolio of AI-written sites from becoming a portfolio of AI-invented facts.
The exact steps
- Ask your agent to check the site's truth pack (it lives at
sites/<your-site>/.pipeline/truth-pack.md) and read every FINDING line. - If findings say "named feature absent from sources" but you know it's real, tell the agent:
"enrich the research sources from the cached Wikipedia pulls, then keep only the landmarks that
actually appear in the sources." The engine's
pipeline/scripts/enrich-wikifull.mjs <targetId>does this free — no paid API calls. - Have the agent rewrite each flagged sentence: exact prices become "we confirm the number on-site", prevalence claims ("most homes around here…") become conditional ("if your home is one of the older ones…"), and any number contradicted by a source gets corrected or removed.
- Re-run the audit stage:
node pipeline/run.mjs --target <your-site> --model kimi --stage s6 --force s6. - Repeat steps 3-4 until the verdict is PASS (each round costs roughly a dollar). Then run
--stage s10 --force s10to index, rebuild + republish the site, and screenshot the header and footer at desktop and mobile to confirm nothing broke visually.
What it looked like for us
Shelby, NC failed the audit twice on 2026-07-25 with ~40 findings and sat paused for four days. The fix took three working rounds on 2026-07-29: ~40 findings → 15 → 2 → PASS. The key move was enriching the evidence, not just deleting content: the full Wikipedia articles confirmed the Earl Scruggs Center, the Don Gibson Theatre, the courthouse square, Lawndale's Cleveland Mills history, Grover's Gingerbread Row and the 1780 Battle of Kings Mountain — so those genuine local details stayed in the copy with citations. What had to go: three invented price ranges, "Shelby City Park", "Lafayette Street", a 12-mile-radius-style unsourced ZIP, and one population that was flat wrong (802 per the census source, not "under 600"). Total LLM cost for the audit rounds: about $0.80. The site passed, indexed 22 URLs the same morning, and the platform flipped it from "Building" to "Ranking".
Gotchas
- The auto-fixer won't save you. The engine's built-in strip-and-retry pass already ran twice and kept failing — a third identical round changes nothing. Read the findings and edit the copy yourself (or have the agent do targeted edits).
- A wiki summary is not evidence. Sites built before the full-article research layer only have one-paragraph stubs in their sources, so true claims fail for lack of proof. Enrich the sources first; don't delete true local colour just because the stub doesn't mention it.
- Hedged claims still fail. "You likely have an accessible riser" got flagged just like the flat statement did. If there's no source, cut the claim — don't soften it.
- Sources can contradict each other. Grover's population is 598 in one dataset and 802 in the census article. When sources disagree, use "a few hundred" or drop the number.
- Check what the stage re-runs. s10 republishes via the
shiplyCLI, which must be on PATH; the first attempt failed with "shiply is not recognized" before any indexing happened.