Vue 2.7.16's Final Patch Broke v-show When Combined With Inline Styles
Any Vue 2 project using a caret range without a committed lock file can silently absorb this regression on the next clean install. The bug is permanent because Vue 2 is EOL, so teams still on Vue 2 need to pin 2.7.15 or refactor the affected patterns now.
Vue 2.7.16, codenamed Swan Song, shipped a style-handling fix that removed a same-value skip check, causing every update to rewrite all inline style properties. When `v-show` sets `display: none` on a hidden element, the style module immediately overwrites it with whatever `display` value the inline `style` attribute declares. The result is that `v-show` stops working on any element that also has an inline `style` containing `display`.
The bug only surfaces on fresh installs. Projects that pinned Vue with a caret range like `^2.7.14` and never regenerated their lock file silently pulled 2.7.16 when dependencies were reinstalled on a new machine. Code that ran fine for years suddenly broke with zero changes to the source.
Three workarounds exist: downgrade to 2.7.15, swap `v-show` for `v-if`, or move the `display` rule from an inline style into a class. Vue 2 is end-of-life and will receive no further patches, so the regression is permanent.
A single patch-level version bump inside a caret range can introduce a breaking behavioral change that no code diff will reveal.
The instinct to blame recent code changes is useless when the runtime itself drifted; the investigation has to start from the installed dependency tree.
Vue 2's EOL status turns what would be a routine bug report into a permanent constraint — teams must work around it or migrate.