This impacts signs with click events or advanced formatting the most. Editing takes priority over click events and advanced formatting probably means the author did not intend the sign to be player editable.
One possibility might be to add a check for this when upgrading signs to the new data format. It could compare the lines of text against the format produced when players place signs without cheats or external tools. The game could set the sign to be waxed if there's more than just a basic text component with no formatting or events ({{}"text":"whatever"
}). This should work since a sign's dye colour and glow are stored in separate values from the text.
1.13.2 is unaffected and the first 1.14 snapshot, 18w43a, is affected. Probably due to the book editing changes that were introduced.
How to reproduce:
Create a simple book:
/give @p minecraft:written_book{pages:["{\"text\":\"Link to PAGE 2\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"change_page\",\"value\":\"2\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"Hover text\"}}}]","[\"\",{\"text\":\"This is PAGE 2\"}]"],title:"Test Book",author:"?"}
Open the book and notice that the hover text does not appear and clicking has no effect for the top 1/3 of the line.
Confirming for 18w48a.
Confirming for 18w47b.
Also, it seems to happen when the villager is not part of a village. Could be because it's checking for a raid but assumes a village exists.
Place a villager in a superflat world and it won't open. Build a simple house nearby and it will open. Remove the doors of the house and it won't open.
When the trade window doesn't open this error also appears in the log:
Error executing task
java.lang.NullPointerException
at aqb.a(SourceFile:285)
at agp.b(SourceFile:978)
at aqg.a(SourceFile:1091)
at ux.a(SourceFile:1191)
at nn.a(SourceFile:69)
at nn.a(SourceFile:13)
at jq.a(SourceFile:15)
at jq$$Lambda$2279/918034632.run(Unknown Source)
at qp.run(SourceFile:18)
at net.minecraft.server.MinecraftServer.q(SourceFile:646)
at net.minecraft.server.MinecraftServer.p(SourceFile:617)
at net.minecraft.server.MinecraftServer.run(SourceFile:576)
at java.lang.Thread.run(Thread.java:745)
I have tested both waxed and unwaxed signs. I have also tested different types of sign and different ways of placing or editing the sign. It all exhibits the same behavior.