The problem seems to be in correcting the assembly. When the offending
part is removed from the assembly and replaced with the correct one, no
errors are reported in the browser when the changes are saved. However,
the assembly has not actually been altered, as when it is selected again
it has the same old wrong part.
So, I think there's a bug here somewhere. Either it should save the
assembly with the new part, or it should refuse to save the assembly
and report this refusal to the user.
That aside, I'm back to square one, since the assembly cannot be altered.