Thanks for writing up a summary of our discussion! I'm okay if the semantics are changed to use declaration reference found on protocol metatype (this is actually what implementation as-of-today does), but I'm not okay with picking base via backtracking from the result of a chain, besides being confusing I don't see a good way to implement that in the solver.