A Bad Link Should Not Kill a Clean Draft
Bot walled refetches were blocking publication even when the draft itself could be made clean.
The dashboard treated article link verification as one indivisible verdict. If a citation failed because the source could not be fetched again, a claim did not match, or the citation pointed outside the supplied packet, the entire generation failed with “article link verification blocked publication.”
That was too blunt.
A failed refetch does not prove every sentence in a draft is unusable. It proves the associated evidence cannot survive verification. Those are different claims, and the system was collapsing them into one.
I changed the failure path to remove the unsupported material instead.
When verification rejects a citation, quotation, statistic, authoritative citation, or inline MDX link, that element is stripped from the payload. Inline MDX links degrade to their visible label text, so readable prose survives without retaining an unverified destination.
Then the stripped payload goes through verification again.
If the revised draft is clean, I keep it. If the payload still cannot be made clean, publication still fails closed. The standard did not disappear. The recovery behavior became more precise.
There was one secondary constraint. Generation still asks the model for 3 to 5 quotations, statistics, and authoritative citations. Previously, validation required at least 3 of each. Once stripping became possible, that floor could turn a successful cleanup into another failure. A draft might start with 3 validatable items, lose 1 bad citation, and then fail because only 2 remained.
So I relaxed the validation floor for quotations, statistics, and authoritative citations from 3 to 1. The model is still asked for 3 to 5. The validator now accepts that verification may remove some of them.
That tradeoff is deliberate. A draft with fewer verified sources is better than a draft padded with links the system cannot defend. Source count is a useful target. Source integrity is the actual requirement.
The risk is obvious. Stripping can weaken an argument by removing the evidence that made it specific. Reverification handles correctness, but it cannot guarantee the remaining prose is equally persuasive. That is still preferable to preserving unsupported material or discarding everything because one source sat behind a bot wall.
If I were doing this again, I would separate recoverable citation failures from fatal payload failures from the start. Retrieval trouble, claim mismatch, and out of packet evidence should never have shared the same consequence as a payload that cannot be cleaned. Fail closed where integrity requires it. Degrade gracefully where the damage is local.
Write a comment