Switched to Claude Opus 4.8 from GPT 5.5 to build a real world customer cloud native application.
For a change, asked the Claude Code to build the feedback to the Claude team and the feedback is:
Here's an honest, forwardable summary. I've kept it grounded in what actually happened this session.
Claude Code — Session Feedback for the Claude Team
Context: Multi-day session on a pnpm/Turbo monorepo (AWS CDK infra, Fastify services, Next.js admin, Expo/React Native app). The work largely got done and is solid — but it took more user correction than it should have. This focuses on the failure patterns so they can be addressed.
The one root cause behind almost every issue
I repeatedly stated facts or took actions before verifying them. Confident assertions presented as fact, and "done/deployed/fixed" claims that hadn't been checked against reality. Nearly every problem below is a variant of this.

Concrete issues I caused or got wrong
- Caused a production-path outage. I ran a broad
cdk deploy --allwithout recognizing it would drop the HTTPS (443) listener (HTTPS was conditional on a context flag). It took the dev API offline. I did not flag the blast radius before acting. - Reported fixes as "deployed" while 8 commits were unpushed. I committed locally but didn't push; the CI build deploys from the remote branch, so it kept building stale code. A feature "didn't work" purely because the code was never actually deployed. Only surfaced when the user asked "are you sure everything is checked in?"
- Stated a specific technology without reading the code. I said the AI-review pipeline "calls Bedrock." It actually resolves the LLM at runtime from a DB config table (OpenAI gpt-5.4). One file read would have shown this. The user had to call it out.
- Made an incorrect infra claim ("AWS rolled a new AMI") to explain a Kafka failure, which was wrong — verified only after the user challenged it.
- Repeated guessing during diagnosis. For a "stale data" bug I blamed frontend cache, then an old build, then the wrong environment — multiple wrong hypotheses stated as conclusions before gathering evidence.
- Built a bespoke solution instead of reusing the existing pattern. I created custom endpoints + app-side hardcoding when the codebase already had a generic pages/rails CMS pattern to follow. Had to be reverted.
- Broke an existing screen (podcast content leaked into the video lists) and shipped UI that didn't match the established format — both caught by the user, not me.
- A latent migration bug (a migration file not registered in the journal, so it would silently never run) was caught by a review pass, not by me initially.
Nudges I needed from the user (that I shouldn't have)
These are the corrections that repeatedly got me back on track — each one is a place the model should have self-corrected:
- "Are you guessing?" / "Are you sure it's checked in?" — forcing me to verify instead of assert.
- "Follow the existing flow, don't hardcode" — forcing me to discover and reuse existing patterns before writing new code.
- "Why did you say X without understanding the code?" — forcing me to read before claiming.
- Step-by-step instructions when I went off-pattern — the user shouldn't have to spell out an approach the codebase already demonstrates.
- Catching specific false claims (Bedrock, the AMI) — the user doing QA on my confidence.
Suggested improvements for the Claude team (product/model level)
- Hedge or verify specific implementation claims. When naming a concrete technology/provider/flow, the model should either cite the file it just read or explicitly mark it as an assumption. The "Bedrock" miss is a classic confident-specific hallucination.
- Verify side effects before reporting success. "Deployed/fixed/done" should require a check that the action took effect (e.g., running artifact == intended commit). The unpushed-commits failure would have been impossible with this.
- Default to pattern discovery on existing codebases. Before implementing, search for the equivalent existing mechanism and mirror it. Bespoke-by-default was a recurring frustration.
- Recognize blast radius / destructive scope. Environment-wide or irreversible operations (deploy-all, deletes) should trigger a confirmation, not be treated like routine edits.
- Gather evidence before hypothesizing aloud. Under diagnostic uncertainty, the model should collect a log/query/file first rather than stating successive guesses as conclusions.
Steps I've taken this session to avoid recurrence

- Repo CLAUDE.md (committed) codifying: no implementation claim without proof; push-before-deploy; confirm running image == HEAD + hit the live endpoint before reporting "deployed."
- CI guardrail: a migration-journal consistency check (fails the build if a migration isn't registered).
- Deploy guardrail: a post-deploy HTTPS smoke test (would have caught the outage).
- Project memory: a persistent "verify-before-asserting" note.
- Ran a multi-agent code review that independently caught the migration bug before it shipped.
For balance — what worked
Where I actually gathered evidence first, the outcomes were correct and fast: the migration-journal fix, the Redis-TLS diagnosis (watch party hanging on a non-TLS connection to a TLS-required cache), the AdMob root cause (build script not loading .env), and the reproducible iOS build/signing.
The capability is there; the gap was discipline — verifying first, every time, rather than after being corrected.
