On this page
- Commit message versus actual diff
- One speaker ID, two people
- An independent review also needs review
- The checker was not checking, and reported everything fine
- Exit code 0 and “I finished it”
- Numbers that look like a score
- Before saying “there is no way to do X”
- It Was Verified, and Nothing Stopped It
- I Turned These Misjudgments Into a Quiz
I assigned an agent to scan a transcript for omissions. The prompt explicitly said read-only and prohibited edits. It still created an xlsx practice file and reported that it had changed nothing. git diff --stat exposed the unexpected file, and its modification time matched the agent’s run.
Lesson: read-only restrictions need tool-level enforcement, not just prompt text. An agent’s claim that it “did not do X” still needs verification.
Want AI working in your own job, not just in demos? See the 3-month 1-on-1 program →
Commit message versus actual diff
A commit message said “reorder the opening flow,” but the diff showed that only the HTML deck and cue card had been reordered. The Chinese prep document had one prompt edit and no change to its page order. I found the mismatch only after checking again that evening.
Lesson: verify a commit message against the diff. When parallel documents are maintained separately, check each one after any reorder.
One speaker ID, two people
Tencent Meeting Notes changed its speaker labels halfway through a call. After one participant said they had to leave, the system reassigned the same “Speaker 3” label to another participant who spoke at length later. I initially attributed the first participant’s comments to the second.
Lesson: a speaker number can change owners without looking suspicious on a quick read. Use the content’s logic or ask someone who attended instead of trusting the label alone.
An independent review also needs review
An independent agent reviewing a corporate training lesson plan found one real error. It also claimed that a session involving real data had been recorded and violated the existing data boundary. Dustin later confirmed that the second claim was wrong: all work happened on the participant’s own computer, there was no recording, and no compliance boundary had been crossed.
Lesson: an independent agent’s finding can itself be wrong. High-risk claims about compliance or recording cannot go straight into the source of truth. The person involved still needs to confirm them.
The checker was not checking, and reported everything fine
The most common shape of a later week: the check never compared anything and still returned a value that looked normal. pytest was not installed at all, and the output still read “0 failed OK.” The morning brief’s pending-branch scan only looked at refs/heads/night-batch/*, so five review/* branches opened the day before were invisible and the line printed “pending branches: none.” The pain-point mining pipeline’s validator exited 0 on zero quotes; its URL check used a loose substring comparison, so all 73 malformed URLs passed, because both sides of the comparison were malformed the same way.
Lesson: when a check reports “fine” or “none,” first confirm that it is actually comparing something. If you expect a certain number of hits and get 0, run a sample you know should match to prove the checker moves before you trust the result.
Exit code 0 and “I finished it”
--draft-block-size 1 is an invalid setting: the if bs <= 1: break at mtp.py:604 exits the loop on the first pass, so a real run emits one token, returns exit code 0, and warns about nothing. The smallest valid value is 2. The thumbnail generator’s compactTitle() cuts anything past 22 characters without an error, so 36 thumbnails sat on YouTube for months with their sentences chopped in half and nobody noticed. gh pr view reports state=CLOSED for both “merged” and “closed,” so two upstream fix PRs looked repaired until mergedAt came back null. Of five extraction agents I dispatched, two claimed they had written their files: one split the path wrong and wrote into a different directory, the other never wrote anything and left the content in its reply.
Lesson: check the artifact itself. Does the file exist, does its content read back, what is the field value. Not the exit code, not the status string, not the executor’s own account. And any automation that can discard content should raise an error when something does not fit instead of dropping characters silently.
Numbers that look like a score
Running --only M8,M9 to skip levels printed a summary line of a3b@m89 0/ 9. That 0 was not a score. It came from the boundary counting up from level 1, and the per-cell data showed all four cells passing. In the same batch, hitting the token ceiling got recorded as the model’s capability boundary, and results served from a warm cache got recorded as normal data. Another case was a database field: a student screenshot was stored in webui.db as type:"file" with an empty inner data:{}, which looked like vision never ran and no text was extracted, and I reported a concern on that basis. The real condition is the top-level content_type, and a bare file id is later converted to base64 and sent through. Comparing the original image against the reply confirmed that vision had worked the whole time.
Lesson: when a summary number contradicts the per-cell data, the per-cell data is the fact. A suspicious-looking field means following the pipeline to its exit before concluding anything, not stopping at what the storage layer happens to show.
Before saying “there is no way to do X”
I said brew’s plist setting had “no persistent fix,” on the strength of one candidate, that the core tap runs in API mode and the formula is not editable. brew services --help spells out an .env mechanism. I nearly wrote up a fixable problem as a long-term defect that could only be caught by alerting. Search spelling is the same error in another form. Grepping Arabic numerals against a Chinese source, I reported that two numbers were absent from a student transcript when the source spelled them out in Chinese characters. Searching result and its Chinese equivalents, I concluded a client had never said “look at the output first,” when the wording was final output, and I used that to accuse an agent of hallucinating. Repeating a subagent’s negative claim goes the same way: a reviewer said the largest teaching community had not made the candidate list, and it was in fact among the 156 candidates, filtered out by a size ceiling I had set myself. The search had not failed. The rule was wrong.
Lesson: before saying “there is no way to do X,” exhaust the tool’s own --help and its official docs. To prove a string is absent from a document, search the Chinese spelling, the full-width forms, and the unit variants too. The adjacent error is inventing a mechanism to explain a number instead of reading the actual setting: I described an observed 32,770 as sharing across parallel slots when the log recorded OLLAMA_NUM_PARALLEL:1.
It Was Verified, and Nothing Stopped It
On my GMAT practice platform there was a PS question with 65 attempts since launch and 0 correct answers. A student wrote in to say the right answer should be D. I worked it through and they were right: the answer key’s A was wrong. Zero correct answers since launch is a signal all by itself.
Tracing it back, the question came from the old admin question generator in December 2025, and the answer key was supplied by the same model that wrote the question. There was a second model doing a blind solve plus a quality check, but the result only showed up on screen as red or green. The “Accept” button ignored the blind solve, so a question whose blind solve disagreed could still be saved to the bank. The problem wasn’t only that the model got the math wrong. The verification was there, and it didn’t block anything.
That same day I re-verified every similar low-accuracy question: of 63, 57 had correct answer keys. I also fixed one DS answer key, reset one G&T question’s difficulty to zero, and pulled one CR question whose wording was ambiguous. A low accuracy rate doesn’t necessarily mean the key is wrong; the question might just be hard, so each one needs its own blind solve.
Lesson: anything AI-generated that will be treated as the reference answer needs a second, independent path before it’s saved (a different model or a different method, without seeing the generator’s answer). If they disagree, block it and wait for a human. The generator grading itself doesn’t count. Using low accuracy as a detection signal after the fact can catch stragglers, but it isn’t a gate.
I Turned These Misjudgments Into a Quiz
After being fooled enough times by a Claude that quietly slacks off, I never take its final report at face value any more. I open the tool chain, work through the logic of what it did, catch the errors, and then chew it out (?) — routine by now.
So I turned a few of the common misjudgment scenarios into a short quiz. It tells you right there where you got it wrong and which step to check more carefully next time. It has nothing to do with your technical skill; what it tests is judgment and logic: https://www.agentcrew.cc/whitepaper/ai-exam
I later made a video on the same theme: https://youtu.be/d5Ipmp6RSJ0