Great update, thank you so much! I found another small difference in physics:
legacy Box2d
local id = factory.create(factory_url, position) -- go with dynamic collisionobject (sphere shape)
local co_url = msg.url(game_hash, id, co_hash)
b2d.body.set_linear_velocity(b2d.get_body(co_url), velocity)
VS
new Box2d 3.0
local id = factory.create(factory_url, position) -- go with dynamic collisionobject (sphere shape)
local co_url = msg.url(game_hash, id, co_hash)
timer.delay(0, false, function()
b2d.body.set_linear_velocity(b2d.get_body(co_url), velocity)
end)