McCaffrey's IR story was real — in September 2024: three weeks of catching contaminated DFS research

A daily research scan spent three weeks doing what any DFS player does before a slate — searching for injury and depth-chart news — and kept finding real articles about the wrong year, the wrong opponent, or the wrong team. Cross-referencing every player-team claim against the actual slate pool caught most of it, produced one false alarm of its own, and still missed things a human reading quickly would miss too. The failure modes, the catches, the one retraction, and the checklist that's left.

On September 17, this repository's beat-writer scan recorded that 49ers running back Christian McCaffrey had been placed on injured reserve — Achilles and calf, out a minimum of four games — and cited a 49ers Webzone article as the source. It was a real article, from a real publisher, about a real player on the correct team. It was also wrong, and the way it was wrong is the actual subject of this piece.

What the article said versus what it said

The same day's market scan re-fetched that exact URL, because a market source (Fantasy Football Calculator's ownership board) still had McCaffrey priced as the slate's highest-owned player at 32.3% — inconsistent with a fresh IR move. The article, read directly, did not say what the first claim reported. McCaffrey was a Wednesday "resting player," no injury named. The Achilles injury in that piece belonged to George Kittle, who was merely limited. The two 49ers actually headed to IR in it were tight end Jake Tonges and receiver De'Zhaun Stribling. Three separate 2026-09-16-dated sources — the ownership board, a DK Network touch-count piece, and GameScript's own player pool — all priced McCaffrey as healthy. The likely cause, confirmed on direct fetch: a near-identical real McCaffrey Achilles/calf IR story exists. From September 2024, not 2026.

The next day's beat-writer run didn't take the market scan's word for it — it re-verified live against San Francisco's own injury report, found McCaffrey "not injury related – resting player," full participation Thursday and Friday, no designation, and formally retracted the claim. Two days, two independent primary-source checks, one real correction. That's the system working. It's also three separate people's time spent on a story that a single date-stamp check would have killed on sight — if anyone had thought to check it.

The other kind: right season, wrong game

McCaffrey's story is contamination across time — a genuine article, attached to the wrong year. The more common failure this scan logged was contamination across space: a genuine, current article, attached to the wrong team or the wrong matchup.

Chicago Bears left tackle Ozzy Trapilo — activated off PUP on August 16 after a 2025 postseason patellar tendon tear, practicing with Chicago since — got filed under the Titans in an early PHI@TEN pull, because a search summary attached his name to the wrong game. Jacksonville defensive end B.J. Green II, who suffered an elbow injury on punt coverage in Jacksonville's actual Week 1 win over Cleveland, sat unresolved in this file's Cleveland section for two full runs before a direct Jaguars source corrected it. Tennessee linebacker Cedric Gray turned up "questionable" in the Philadelphia Eagles' section of a September 17 pull; he's never played for Philadelphia. All three are the same mechanical error — a real, current, correctly dated article about a real player, filed under the wrong opponent because the retrieval step matched on a name or a headline instead of a roster.

Week 3's first pass, six days before this article was written, caught the same pattern four more times in a single sitting: a Kittle hamstring story tied to "Week 3 vs. Rams" when San Francisco's actual Week 3 opponent is Arizona; a Miami report framed as "Week 3 vs. Buffalo" when Miami's actual opponent is Kansas City; a Washington headline reading "Commanders vs. Raiders" against a slate where Washington's real Week 3 opponent is Seattle; and a Cam Ward shoulder injury that traced back to Week 18 of the prior season. None of these four were stale in the McCaffrey sense — they read as current, dated-this-week content. They were just about a different game than the one the search was supposed to answer.

The defense produces its own false alarm

The corrective habit this scan built — treat "the pool doesn't back this up" as reason to distrust the article, not the pool — cuts both ways, and one case shows the cut going wrong. Two separate runs flagged every mention of "Kevin Stefanski" on Atlanta Falcons content as search-engine contamination, on the reasonable-sounding prior that Stefanski coaches Cleveland. He does not, in this universe: Atlanta hired him in January 2026 after not retaining Raheem Morris, and Cleveland separately and correctly hired Todd Monken the following month. A third run caught the error only by doing the thing the first two skipped — fetching Atlanta's own coaches page directly instead of trusting a prior about who coaches where — and retracted the flag, restoring every quote it had wrongly discarded.

The lesson isn't "trust the article more." It's that a real-world prior is exactly as capable of being wrong as a stale search result, and the only thing that resolves either kind of error is the same move: check the specific, current, authoritative source for the thing in question, not your memory of how the league used to look. This same scan run separately confirmed several rosters that contradict real-world 2025 priors on sight — Mike Evans playing for San Francisco rather than Tampa Bay, Christian Kirk on San Francisco rather than Jacksonville, Kyler Murray having signed with Minnesota. A reader building from memory instead of the actual slate pool would get all three wrong with total confidence.

When the answer is that there's no answer

Christian Kirk is worth its own line, because it's the one case where the correct outcome was four straight runs of finding nothing. An October-2025-dated "Kirk hamstring" story kept surfacing against Houston searches, and each pass discarded it as stale without fully closing the question. The real resolution, reached only in run six: there was never a Houston Christian Kirk item to confirm or deny. The slate's only Christian Kirk is the 49ers receiver, on injured reserve, in an entirely different game. Four runs treated "can't confirm this" as an open item when the honest read, available from the start, was "this doesn't exist" — a check against the slate's actual roster would have closed it on day one instead of day six.

What this means for anyone doing their own research

Nothing above required automation to catch — every correction here came from fetching one more primary source and reading it against the specific matchup in question, which any player can do by hand before a slate locks:

  1. A byline that reads "this week" isn't proof it's about this week's opponent. Check the matchup named in the article against the team's actual schedule, not just the dateline.
  2. A familiar name on the wrong team is still worth a direct check, especially in the first few weeks of a season, after any coaching or roster move you might not have registered. Trust the slate's pool over what you remember, not the other way around.
  3. Treat "I can't confirm this" and "this isn't real" as different findings. If a claim about a specific player-team pairing won't resolve after checking the team's own source directly, check whether that player is even on that roster before spending another pass on it.
  4. Your own skepticism can be the thing that's wrong. A source that contradicts what you expected is worth a direct primary check before you discard it — not automatic confirmation that it's the source that's mistaken.

None of this argues for reading less before a slate. It argues for reading one primary source before trusting a claim that matters, instead of trusting the search result that produced it.