A snapshot test is a diff you agreed to review

A snapshot test asserts that output has not changed, which is only useful if somebody reads the diff when it does.

$this->assertMatchesJsonSnapshot($response->json());

# and the failure mode:
#   the test fails, the developer runs with -d
#     --update-snapshots, the build goes green, and
#     nobody looked at what changed.

# so: snapshots are committed, and a diff in a pull
# request needs an explicit comment about why.

The regeneration reflex is what makes snapshot suites worthless over time, and it cannot be fixed with tooling — it is a review convention. Snapshots work best for output that should genuinely be stable and human-reviewable: an API response shape, a rendered email, a generated document. They work badly for anything containing a timestamp or an id, which needs normalising first or every run is a diff.