Claude Code Ignores Your Audit Report

You fed a detailed audit and Claude Code did its own thing. The report is context, not a contract — convert to a numbered checklist, execute one item at a time.

You paste a 4-page audit report into the prompt, say “fix everything in here,” and walk away. You come back to find: Claude fixed 3 of the 14 items, made up 2 new “improvements” not in the report, restructured a directory you didn’t ask about, and never touched the highest-severity issue. The report you spent an hour writing is now archeology.

Claude treats a long unstructured input as context — background to inform decisions — not as a contract to execute. Without explicit binding (“execute item N from REPORT.md”), it reads the report, forms its own plan, and the original list silently becomes a “suggestion.” The fix: convert the report to a numbered checklist, reference items by number, execute one at a time, and diff progress against the original list.

Common causes

Ordered by hit rate, highest first.

1. The report is long; Claude skimmed and formed its own summary

Once a report exceeds ~2 pages, Claude can’t hold every item with full fidelity. It summarizes mentally and works from the summary — same lossy-summary problem as broken context, except self-inflicted from the start.

How to spot it: Ask Claude to “list every item in the report, numbered.” Compare to the actual report. Missing items reveal what got summarized away.

2. The prompt said “use this report” without binding to specific items

“Use this report” tells Claude what the report is, not what to do with each item. Claude makes its own plan, prioritizes by its own heuristics, and doesn’t flag deviation from your list.

How to spot it: Re-read your prompt. If it doesn’t say “execute item 1, then 2, then 3,” Claude was free to pick.

3. Report items aren’t clearly separable

“Improve error handling and add tests and update docs” is one bullet with three tasks. Claude does one of them and considers the bullet complete.

How to spot it: Bullets that contain “and” or multiple verbs. Each conjunction is a hidden sub-item Claude may skip.

4. Conflicting items in the report

Item 5 says “use async/await”; item 11 says “convert to Promise chains for IE compatibility.” Claude silently picked one direction. The conflict was the bug.

How to spot it: Read your own report for contradictions. If you find them, Claude found them too — and chose without telling you.

5. Report mixes status (already done) and todos

The report has a “current state” section and a “changes needed” section. Claude misreads which is which, skips items it thinks are already done, or “fixes” things that are already correct.

How to spot it: Some “done” items got re-touched, some “todo” items got skipped. Structural confusion.

6. The report invokes domain knowledge Claude doesn’t have

“Improve the billing reconciliation accuracy per the spec in Linear ticket BIL-42” — Claude has no access to Linear, can’t look up BIL-42, and proceeds with a generic “billing improvement.” Half the items reference context Claude can’t access.

How to spot it: Items reference URLs, ticket IDs, Slack threads, or private docs. Claude treated those as opaque.

Shortest path to fix

Ordered by ROI. Step 1 alone fixes “Claude ignored my report” in most cases.

Step 1: Convert the report into a numbered checklist

Save the report as AUDIT.md with a strict numbered format:

# Audit 2026-05-22

Each item is independently executable. Status starts as TODO.

## 1. Replace `==` with `crypto.timingSafeEqual` in password comparison
- File: src/api/auth/login.ts:42
- Severity: P0
- Acceptance: function uses constant-time comparison; one test verifies timing-attack resistance.
- Status: TODO

## 2. Lower password reset token TTL from 24h to 1h
- File: src/api/auth/reset.ts:23 (constant `TOKEN_TTL`)
- Severity: P1
- Acceptance: constant is 3600; existing tokens > 1h old fail validation.
- Status: TODO

[... etc, items 3-14]

The “Acceptance” line is what Claude binds completion to. Without it, “done” is fuzzy.

Step 2: Bind tasks to specific item numbers

Read AUDIT.md.
For each item, quote the number and title back to confirm you have all 14.
Then execute item 1 only.
After applying, update its Status to DONE in AUDIT.md.
Stop. Wait for me to say "proceed to item 2."

One item at a time = no skipping, no inventing.

Step 3: Verify the read before delegating

After Claude reads the report:

List every item by number and one-line title. No paraphrasing.
If you can't quote item 7 verbatim, your read was incomplete — re-read.

This catches “Claude summarized” before it costs you a session.

Step 4: Resolve contradictions before delegating

When you spot contradictions in your own report, fix them before Claude does silently:

Items 5 and 11 conflict. The correct direction is: async/await everywhere.
Drop item 11 from AUDIT.md or rewrite it. Claude does not get to choose.

Step 5: After execution, diff against the original list

Claude has applied items 1-14. Now:
1. For each item, confirm Status is DONE in AUDIT.md.
2. For each DONE, paste the actual diff that addressed it.
3. List any items where the diff doesn't match the acceptance criteria.

You’ll see immediately which items were genuinely done vs claimed done.

Step 6: For items needing external context, fetch it first

If item 8 references “ticket BIL-42”:

You don't have Linear access. Before working on item 8, ask me to paste BIL-42's content.
Don't fill in the gap with your own interpretation.

Make external context explicit, not assumed.

Prevention

  • Reports for agents are numbered checklists with explicit acceptance criteria, not prose
  • Reference items by number (“execute item 7”), never “the part about X”
  • One item per session step; verify completion against acceptance criteria before moving on
  • Resolve conflicts and ambiguity in the report yourself — Claude shouldn’t pick silently
  • Make external references explicit (paste ticket contents) instead of trusting Claude to fetch them
  • Diff progress against the original list at session end; status drift is the bug-detector

Tags: #Troubleshooting #Claude Code #Debug #Audit report