The solver_type field is a proto enum causing conflicts for concurrent development. This should be made a string as #1694 did for layer type.
The solvers are currently defined and implemented in monolithic hpp and cpp that make extension awkward. Each should be split into its own header and source.
After #2860 #2782 #2856