Proverb separates the crossword solving task into candidate generation and grid filling.
In the diagram below, candidate generation consists of the Coordinator passing the clues and target lengths to a collection of Expert Modules. Each modules returns a weighted list, which are then combined by the Merger into a single candidate list for each clue.
Grid filling is accomplished in the Solver, which can also get additional candidate information during solving from the Implicit Modules.