The "draft only from facts" rule matches what I've seen work. Two additions that helped in a similar pipeline. First, verify citations mechanically after generation: for each claim, check that the cited fact id exists and that the claim's key nouns and numbers appear in the fact's quote. A cheap string or embedding similarity check catches most cases where the model cites a real fact but overstates it ("plans to" becoming "has launched"). Second, tense and modality drift is the most common failure, so add a small list of banned upgrades to the validator: plan/launched, discussed/agreed, hiring/struggling. If a sentence trips one, send it back for a rewrite instead of to the reviewer. Also, keep the fact's seenAt visible in the review screen. Facts older than about 60 days should be phrased as questions too, because hiring posts and roadmaps go stale quickly.