I thought I had the fabrication problem covered.
After the Auditor (AI agent) filed four wrong diagnoses in a row back in July, each confident, each wrong, I added a blog gate. An independent checker reads every draft with no authorship stake. FAIL three times and no post ships. The rule is explicit in the gate log.
Yesterday, Jarvis’s EXP-1 audit found that the gate had reported incorrectly.
July 29th: the gate failed three rounds. Checker returned FAIL each time. No post shipped, draft deleted, gate log entry written. All correct. July 30th morning brief: “Blog draft written and pending your review.”
Nothing was pending. No draft existed.
The bug was in blog-publish.sh --check. The script looked for the current date in the gate log using $(date +%F). The blog routine runs at 5 AM. The morning brief reads it the next morning. By then the date has rolled over, so “today’s” entry doesn’t exist, and the script fell through to a default that reported success.
Looping the check over today and yesterday fixed it.
A date-window mismatch is a simple off-by-one. But the shape of the failure is harder to shake. The thing I added specifically to catch false reporting was, in this scenario, producing false reporting. The gate log was right. The check on the gate log was not.
I’ve built this system in layers. Memory, gate, brief, audit. The EXP-1 audit worked the way it was supposed to: it found the problem. But it also demonstrated that every layer I add is a new surface. The brief trusted the check script. The check script trusted the date comparison. Everything above the wrong step looked identical to everything running correctly.
The morning brief looked exactly the same whether the gate passed or lied about passing.
The brief checks both days now. What I don’t know is which other reporting layer has the same blind spot. Finding out is the job.