`assemble()` now calls `fromAssembled()` on ctors