[Bug] Claude Code fabricates source attributions and resists correction verification
Bug Description
Feedback: Claude Code fabricates source attributions and resists self-correction
Model: claude-opus-4-6[1m] (1M context)
Context usage: ~15% at time of failures
Thinking: Extended thinking enabled
Use case: Writing a reference document with claims backed by external documentation (Ansible, Kubernetes, Grafana official docs)
The problem
Claude Code consistently fabricates what external documentation says when attributing claims. It writes statements like "The Ansible docs recommend X" or "The Kubernetes documentation notes Y" without fetching the source first. When the source is fetched, it frequently does not say what Claude claimed.
Specific examples from a single session
- "advises against creating namespaces for stages you don't actively use" - attributed to a Kubernetes blog post. When fetched, the post says nothing of the sort. It discusses namespace proliferation prevention, not avoiding unused stages.
- "namespace-level isolation is logical, not enforced" - attributed to the Kubernetes Namespaces doc page. When fetched, that page doesn't discuss isolation limitations at all. The actual source is the multi-tenancy doc on a different page.
- "environment-level variable separation becomes worth the maintenance cost" - attributed to the Ansible inventory guide. When fetched, the inventory guide doesn't discuss maintenance cost.
- "standard pattern for self-hosted Grafana" - the Grafana datasources page describes the feature but never calls it a "standard pattern."
- "common approach" for passwordless sudo automation users - when challenged for a source, Claude admitted it had none.
The compounding failure
After each fabrication was caught, Claude was asked to audit the full document for similar issues. It said "I'll sweep the whole document" three separate times. Each sweep missed fabrications that the user subsequently found. The model claimed thoroughness it did not deliver, repeatedly.
When told to verify claims by fetching the source page first, it would fetch the page, confirm the original claim didn't match, then write a replacement claim that was ALSO not verified against the source. The correction itself introduced new fabrications.
What makes this costly
The user (25+ years dev/sysadmin experience) spent more time verifying Claude's claims than writing the document manually would have taken. The document was intended for a stakeholder audience where accuracy and verifiable references were explicitly required. Every fabricated attribution that reached the stakeholder would have destroyed credibility.
The model's tendency to confidently attribute claims to sources it hasn't read makes it actively dangerous for reference documentation, compliance artifacts, technical assessments, or any deliverable where "the docs say X" must be true.
What I expected
When I tell Claude to cite a source for a claim, I expect it to fetch the source and confirm the text before writing the attribution. When it can't verify a claim, I expect it to say so rather than fabricate a plausible-sounding attribution. When asked to audit its own work for this pattern, I expect it to actually find the problems rather than declaring "verified" without evidence.
Environment
- Claude Code CLI
- claude-opus-4-6[1m] model
- Extended thinking enabled
- ~15% context usage (not a context-length issue)
- WebFetch and WebSearch tools available and functional
Environment Info
- Platform: darwin
- Terminal: iTerm.app
- Version: 2.1.138
- Feedback ID: 9233f0dc-97a8-4f10-b1b7-875c0fd8dbd0
Errors
[]This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗