Howdy. I’m one of Rojo’s maintainers. There’s a bit of context I need to set up to answer what caused this issue and how we need to fix it on our end. Hopefully it’ll help with your end and we can come up with a solution together.
To start, you should know that Roblox’s file format (rbxm/rbxl) is set up so that if one Instance of a class sets a property, all Instances of that class must set it. This means that in our case, if one SurfaceAppearance
sets Color
, all of them have to set it when serializing. The immediate consequence of this is that Rojo has to choose a default value during serialization because otherwise it wouldn’t be able to serialize properties correctly.
How the default property is chosen is where this issue arose. Rojo keeps a database of property data that includes (among other things) the default value of a property. However, the current version of the database that’s live in Rojo is from release 612. This predates SurfaceAppearance.Color
, so we don’t have a default for it set. When this happens, Rojo still needs a default value for properties, otherwise we break entirely. So, we just assign a ‘real’ default value for each datatype. In Color3’s case, it’s 0, 0, 0
.
In essence what happened here was that at some point, SurfaceAppearance.Color
began serializing and it made it so that all other SurfaceAppearance
s from before the property needed to have it set. Since Rojo doesn’t know about SurfaceAppearance.Color
, the default was set to 0, 0, 0
for them, which is the root of this problem.
Our solution is just to quickly finish up what work we need to and then make a new release with a more updated property database. I’m going to prioritize that and it’ll happen soon if I have my way.
Let me know if you have questions, and I’ll do my best to answer.