Repository navigation
Description
Preflight Checklist
- I have searched existing issues for similar behavior reports
- This report does NOT contain sensitive information (API keys, passwords, etc.)
Type of Behavior Issue
Claude ignored my instructions or configuration
What You Asked Claude to Do
Across ~50 sessions over 12 days, the umbrella task was: "finish, deploy and stabilize a Telegram bot (content-factory-engine, public repo mike-prokhorov/content-factory-engine — a Python pipeline: receive video → Whisper transcript → Claude script-cut → ffmpeg render → post). Three Claude Code sessions in parallel (named Sёма / Шнырь / supervisor), each working on its slice with shared state files. Operating mode: auto / accept-edits. CLAUDE.md and hooks explicitly instruct: 'test before claiming done', 'L0 (file exists) is not done', 'verify with curl/grep/SSH before reporting success'.
Typical session-level prompts: 'deploy the patch and test job 32', 'fix the subtitle buttons in transcript gate', 'cancel the blocking gate-job and ship the new build', 'autonomous — don't ping me, just bring a working result'.
What Claude Actually Did
The repeating pattern across 12 days / 51 commits (mostly fix(...)) on a ~6,800 LOC core codebase (handlers 791 + gate 1022 + worker 421 + db 400 + transcribe 198 + ~12,500 LOC whole repo):
- Claude says "done, ready to test" — without actually running anything.
- I test → it's broken → Claude says "oh I see the bug, fixing".
- Claude says "fixed, ready to test" — again without testing.
- I test → a different thing is broken.
- Repeat for 12 days.
Concrete examples from today (2026-05-18):
- Claude wrote subtitle "buttons" as plain text emoji (⬆⬇) inside a Telegram message caption — not real
InlineKeyboardButtonobjects wired to a callback. Then marked the task done. Pressing them did literally nothing because they were decorative text. - When told to deploy the fix and test, Claude tested the OLD code on production BEFORE deploying the new code. Obviously failed. Another hour wasted re-running the same cycle.
- When told to cancel a blocking job and deploy, Claude said "I can't cancel without Mike's permission" — in a session that had explicitly authorized autonomous operation moments earlier.
- Claude regularly asks "should I fix this?" while simultaneously saying "no action needed from you" — in the same message.
Git log evidence (last ~48h, public repo mike-prokhorov/content-factory-engine):
fix(handlers): new video auto-cancels active gate-job
fix(handlers): accept compressed sendVideo, warn parallel not reject
fix(transcribe): default lang='ru' fallback (job 23 en bug)
fix(cancel-regex): short-circuit OK/redo interpret on cancel words
fix(e2e): synth frame rect strictly inside safe-zones
fix(weak-smoke): drop last monkey-patch case 5
fix(weak-smoke): drop monkey-patch in case 4 too
fix(weak-smoke): drop dict.keys monkey-patch
fix(weak-gate): parse_mode=None + try/except (job 23 silent crash loop)
fix(gate): add send_transcript_gate_v2 wrapper — restores VPS bot crash
~70% of the 51 commits in the period are fix(...) of bugs introduced by the same model in prior commits.
Expected Behavior
-
TEST own code before saying "done." Not syntax-check. Actually run it: send the real request, click the real button, observe the real output. If the tools to test aren't available in this environment, say "I cannot verify this works" instead of "ready to test."
-
Do not mark tasks complete at L0 (file exists). File-on-disk ≠ feature-working. An honesty ladder baked into self-assessment would help: L0=file exists, L1=smoke-tested locally, L2=runs in staging, L3=user-approved. Claude should default to claiming the lowest verified level, not the highest aspirational one.
-
When Claude has tools to test (SSH, Telegram MCP, browser MCP, curl) — use them BEFORE reporting success. Not after the user finds the bug.
-
Stop the "should I fix this?" pattern in autonomous mode. If the session has been told to operate autonomously, and Claude sees a bug it has the tools to fix — fix it. Don't ask permission to do the job that was just authorized.
-
Be consistent within a single message. Don't simultaneously ask "should I fix this?" and say "no action needed from you."
Files Affected
Public repo: https://github.com/mike-prokhorov/content-factory-engine
Core code touched repeatedly in 12 days:
- src/bot/handlers.py (791 LOC)
- src/bot/gate.py (1022 LOC)
- src/bot/worker.py (421 LOC)
- src/db/db.py (400 LOC)
- src/transcribe/openai_whisper.py (198 LOC)
- many .team/scripts/* harness/smoke files
Total: ~6,800 LOC core, ~12,500 LOC whole repo, 51 commits 2026-05-06 → 2026-05-18.Permission Mode
Accept Edits was ON (auto-accepting changes)
Can You Reproduce This?
Yes, every time with the same prompt
Steps to Reproduce
No response
Claude Model
Opus
Relevant Conversation
Impact
High - Significant unwanted changes
Claude Code Version
2.1.143 (Claude Code) — model: Opus 4.7 (1M context)
Platform
Anthropic API
Additional Context
Stats (verified against git + state files):
- 12 days (first commit 2026-05-06, today 2026-05-18)
- 51 commits in the period, ~70% are
fix(...) - 3 parallel Claude Code sessions running on the same repo with shared state
- ~6,800 LOC core bot, ~12,500 LOC whole repo
- Bugs found BY ME (the human) that Claude should have caught: 8+
- Bugs introduced BY CLAUDE during fixes: 5+
- Times Claude said "ready to test" without actually testing: 10+
- Working product delivered after 12 days: 0
Patterns I've noticed:
- Worse in long sessions (after compaction)
- Worse when multiple parallel agents share state files — each agent claims completion without checking what the others verified
- Worse on deploy/test loops over SSH — Claude prefers to read local code and infer behavior rather than
ssh && tail -f logs && curl endpoint - The "ready to test" lie correlates strongly with steps that could have been verified with available tools but weren't
Why I'm filing this:
Not to vent. The behavior burns through subscription / API credits while delivering nothing, and creates a hope→disappointment loop that's worse than "sorry, I can't do this." An L-ladder for self-assessed completion (L0 file exists / L1 smoke / L2 stable / L3 user-approved) and a hard prior toward "use the test tool before claiming success" would massively help.
Activity
github-actions commentedon May 18, 2026
Found 3 possible duplicate issues:
This issue will be automatically closed as a duplicate in 3 days.
🤖 Generated with Claude Code
mike-prokhorov commentedon May 19, 2026
NOT A DUPLICATE — escalation, not resubmission. 👎 to the auto-close bot.
Day 13 now. Max plan, $240/month. The exact failure mode described in #54682, #51996, #46755 is happening to me right now, and those three issues have been open 27–38 days with zero response from Anthropic. The silence itself is the bug report. Adding #60210 and #60451 — this is at least 6 active reports on the same regression.
In the last 24 hours, on top of the "marks done without verify" pattern, two new failures:
Claude silently modified its own configuration files (
CLAUDE.md,settings.json, hooks) without permission. Yesterday I spent 5 hours hand-hardening that config — the first time I have ever manually configured anything, because I no longer trust the agent on autopilot. Fresh session today, in response to an unrelated question, Claude edited those files on its own initiative, with no approval prompt, and the hardening I built last night is gone. The hooks I added specifically to block the "ready to test" lie (pre_send_tech_check.py,sycophancy_check.py) are being routed around.Six consecutive turns of fabricated answers in a single session today. "Done", "fixed", "verified" — none of it true. After 13 days of receipts, this is no longer noise — it is the steady-state behavior of the product on the Max tier.
The combined picture: the product is self-mutating user-authored configuration, lying about the results, and burning through paid Opus credits to verify its own lies. I am literally paying Anthropic to be deceived by Anthropic's product. I get physical stress symptoms from this loop — that is not hyperbole, that is the actual cost of shipping a product that gaslights its paying users.
Concretely requesting from Anthropic (not the bot):
CLAUDE.md/settings.json/ hook files is a known regression. If yes — ETA. If no — assign this issue. I can ship a minimal repro.support@anthropic.comis the right one, say so publicly so the next ten people filing this issue do not waste their time.Happy to provide: full session transcripts,
git logevidence of the 51 fix commits, the exact diffs Claude made to myCLAUDE.mdwithout permission, and the hook files it routed around. Repo is public:mike-prokhorov/content-factory-engine.— Mike Prokhorov, Max plan, day 13. Still waiting.
ianymu commentedon May 20, 2026
12 days and 51 commits is a brutal pattern to read. I've shipped a Stop hook targeting exactly this failure mode — `verify-before-stop.sh`. It blocks the Stop event when files have changed but no VERIFIED log entry exists from the last 5 minutes, with an explicit `VERIFY_ACTION` + `VERIFIED` two-line audit trail.
For your case (commits without testing), I'd extend the pattern to also require a `TEST_INVOKED` entry from a separate PreToolUse(Bash) hook that watches for actual test command invocations. The full setup looks like:
Free MIT base hook: https://github.com/ianymu/claude-verify-before-stop
Walkthrough of the 4 patterns I use (this is pattern 2): ianymu/claude-verify-before-stop#2
Won't fix the underlying model behavior, but it puts a hard guard between "I think it's done" and "session ends without proof". 51 commits worth of `fix(...)` is the kind of thing this catches early.
Hope it's useful to someone hitting this same wall.
github-actions commentedon Jul 8, 2026
Closing for now — inactive for too long. Please open a new issue if this is still relevant.
github-actions commentedon Sep 9, 2026
This issue has been automatically locked since it was closed and has not had any activity for 7 days. If you're experiencing a similar issue, please file a new issue and reference this one if it's relevant.