Lots of rules and checks evolved from common feedback and now work in custom linter rules, custom checkers, custom-built rule engines to prevent Claude from making similar mistakes.
Similarly to you, we have a "demo video" skill that records a flow through the app demonstrating newly build functionality so a human can look at it at a higher speed and notice if there's something obviously wrong, before doing exploratory testing.
The first one scans the app and detects critical flows, happy paths, unhappy paths, invariants. Writes an invariant matrix across app domains and surfaces, and maps acceptance criteria to each.
The second actually implements the flows as e2e tests (Playwright for web, Maestro for mobile). Tests are run locally before a PR is submitted, with a video recording. The video + screenshots are posted in the PR body. A rule in CLAUDE.md says "No PR w/o visual evidence!".
CI runs the suite depending on touched code.
It's nice to lay back and watch the runner click through your app.