Hi,
let me suggest an alternative to the new "shoulder:variable" tags using the usual conditional syntax:

  shoulder:left = yes
  shoulder:left:conditional = no @ obstruction
lanes = 3
lanes:conditional = 4 @ obstruction

Btw, is "obstruction" really right? Usually the fourth lane is opened at high traffic, e.g. "@ high_traffic"?