Why is cache_discovery not rebuilt on cache-rebuild? In my local dev environment drush cr does not rebuild the cache_discovery table.  I have to manually truncate it.  Is it because expire is set to -1 on all rows?  If so, did I mess something up in setting up this site?

I think I could add $settings['cache']['bins']['discovery'] = 'cache.backend.null'; in my local settings file, but then I'd have to truncate it in production when making changes like the one that brought this up.  This doesn't seem right.

Maybe I'm just missing a setting somewhere, but drush cr, rebuild.php, and restarting apache all leave cache_discovery exactly as it was.
If you truncate the table cache_discovery and then do a cache-rebuild the table is filled again with data, what would not be, if this was still a cache-clear. In D8 clearing the cache is more like rebuilding the cache, hence the new name. Some tables are still cleared, like the render cache or the twig cache, because these are filled with new data from the result of each request. But the structural data like discovery, router, config and some more are rebuilt, so that the first request after clearing the cache doesn't take too long.

If you set $settings['cache']['bins']['discovery'] = 'cache.backend.null';, then you freeze the table content. It is not touched, even not by a cache rebuild, until you remove this setting.