The cron fired at 08:22 BST on 2 July. Triage ran across 150 clusters and mortgage came out first at calculator score 20, the highest in that morning’s set. Candidates were fetched. The pipeline produced zero drafts.
No error. No timeout. The cycle completed cleanly and produced nothing.
That was the first zero-drafts firing in the 14-day run. From outside the pipeline, it looked like a failure. It was not.
The three days before it
Day 2 was 30 June. The Mon→Tue cron produced one draft: mortgage-abandoned-about-above. The slug picker was still mid-fix at that point. Ten of 13 sentences cleared the verifier. The three that failed were edited manually. The pillar shipped alongside T-007 Marriage Allowance: two publishes from one morning cycle.
Day 3 was 1 July. Cron fired at 08:21 BST. One draft produced on the same mortgage rate-spike cluster: BBC, Zoopla, Moneyfacts, Bank of England sources, US–Iran framing, £232 and £66 regional affordability figures. The pipeline had published on that ground the previous day. That draft went no further.
Day 4 was 2 July. 150 clusters ranked. Mortgage at 20 again. Candidates fetched again. Same sources, same angle. Zero drafts.
The cron exited clean with nothing in the output state.
What the gate is checking
The late-June framing already established the verifier as the pipeline’s real editorial gate. The July sequence makes the suppression mechanism more specific. The verifier-corrective gate is not a sentence editor. It does not read a draft and audit individual claims. The check that produced the Day 4 zero ran before the drafter: does this ground justify a new pillar, or does it rehash what the pipeline has already covered?
The mortgage cluster passed the factual layer: the BoE rate data was real, the affordability figures were traceable, the sources were credible. It failed on coverage. The pipeline had published on those same sources, with that angle, two days into the run. A second draft would produce a duplicate: same figures, different wording, occupying a second URL on the same topic.
That is not coverage. That is fabrication by repetition.
Zero output is the correct response to that input. The gate produced the correct output on Day 4. The Day 3 draft went no further either, which is evidence the same call was made 24 hours earlier.
What fresh ground looks like
Day 5 was 3 July. ISA allowance and student loan repayment thresholds, both drafted in the same overnight session as the branded-exports work and published before the morning cron fired. ISA alone: 754 words, 15 hand-curated claim blocks drawn from three gov.uk pages. Statutory figures the pipeline had not touched before. The verifier cleared both.
Day 6 was 6 July. An AppleEvent -1712 lockup killed the initial fire; the 08:35 re-kick ran with the new gov.uk Search API sources polling live in a real cron cycle for the first time. UK House Price Index April 2026 and Pension Annual Allowance drafted and shipped. April 2026 government data, no prior pillar on either topic.
Four pillars shipped across Days 5 and 6, zero across Days 3 and 4. The gate was correct in both directions.
Distinguishing a correct zero from a broken cron
Day 6 also surfaces the operational problem. The morning that produced the best output of the run started with a system failure: AppleEvent -1712 at the initial fire time, no output until the re-kick at 08:35. From a headline-level monitoring view, the early morning of Day 6 (broken cron, zero output) and Day 4 (gate suppression, zero output) look identical.
They are not. A gate-suppressed zero completes every stage of triage, ranking, and candidate fetch, then exits with an empty draft set. Broken-cron zeros die earlier: hung process, error log, or a missing pipeline stage. Exit-state monitoring separates them; output-count monitoring cannot.
Monitoring that reads only output count misclassifies both as failures. Monitoring that reads stage-completion flags classifies the Day 4 zero correctly: the pipeline ran, the gate decided, the correct answer was nothing.
Why silence is cheaper
The expected failure mode for a content pipeline is wrong output: a factual error, a fabricated claim. Operators tune for output accuracy. A zero-output morning registers as a system problem in that model.
The gate inverts the failure calculus. The failure it prevents is production. The expensive outcome is a pillar drafted on stale ground, queued, and published. A duplicate claim across two pages, a potential figure discrepancy if the source data has moved between publishes, a manual retraction. Finding and correcting after shipment costs more than not producing before.
Zero drafts on stale ground costs nothing. A shipped duplicate costs attention to diagnose and time to correct.
The gate is asymmetric in the right direction: prefer silence to output when the ground is questionable.
Out of scope
This covers the verifier-corrective gate’s suppression of stale-ground drafts on the mortgage cluster across Days 3 and 4. Out of scope: false negatives. No confirmed case of the gate suppressing genuinely fresh ground has appeared in the 14-day window. Also out of scope: the scoring logic that kept mortgage at calculator score 20 despite the prior publication.
The operating principle
The cron’s job is not to produce a draft every morning. It is to produce a correct draft when the ground justifies one.
A zero-drafts firing against the top-ranked cluster on stale ground is the gate’s pass mark, not a failure to produce. The silence on Day 4 was the correct output. Days 5 and 6 confirmed the calibration holds in both directions: the mortgage cluster correctly blocked, ISA allowance and student loan thresholds and House Price Index and Pension Annual Allowance correctly cleared. Four pillars shipped on genuine ground, zero on stale.
The gate works. The zero was evidence.



