Model::shouldBeStrict in development, and what it catches

One call turns on three separate checks that each convert a silent misbehaviour into an exception.

// AppServiceProvider::boot()
Model::shouldBeStrict(! app()->isProduction());

// which is these three:
Model::preventLazyLoading();
//   → an N+1 becomes an exception
Model::preventSilentlyDiscardingAttributes();
//   → $model->fill(['typo' => 1]) throws instead of ignoring
Model::preventAccessingMissingAttributes();
//   → $model->missing_column throws instead of returning null

The third is the one with the largest immediate yield, because a column removed in a migration leaves every read of it returning null rather than failing — and the resulting bug is a blank field somewhere rather than an error. Turning all three on across an existing application produces a large number of failures on the first run, most of them in tests, and each one is a real defect or a real assumption worth writing down.