Freecell Solver is a feature-rich library and stand-alone command line program for solving games of Freecell, and similar Solitaire games. Freecell Solver is already mature software and is currently at version 2.8.0. The project in question will enhance it in several ways:
In a Depth-First-Search Scan, each state gives way to several derived states. Freecell Solver has various tests, each generating different states. These tests can be grouped together and then the tests generated by the entire group can be ordered.
At the moment only a random ordering is supported. The project will create an abstract way to sequence the tests in a group with several supported back-ends.
Patsolve is a competing open-source Freecell Solver by Dr. Tom Holroyd. The project will incorporate Patsolve's test-ordering logic (which gives way to a very fast atomic-moves based ordering) into Freecell Solver based on the framework proposed in the aforementioned change.
That way it would be possible to run several Patsolve scans on one state collection using the Freecell Solver framework.
At the moment, Freecell Solver supports a DFS scan and a Best-First Search scan. The project will also add the Mixed Depth-First-Search/Breadth-First-Search scan from Patsolve which gives near minimal solutions.
Freecell Solver as of now distinguishes between "Hard Threads" - so called system threads that operate on the same states collection. However, no locks are available to make sure they don't interfere with each other.
Shlomi Fish, a Freecell Solver developer, has already proposed a model to thread enable Freecell Solver. This model will be implemented as part of the project.
Freecell Solver has a relatively complex architecture with 20 modules but still has no up-to-date architecture document. One will be written as part of the project to aid external developers to take part in it should they desire to do so.
Due to the fact that Freecell Solver can read options from a file and can process presets, a new command line analysing mechanism is needed. This will be implemented as part of the project and will sport nested doubly-linked lists for manipulating the arguments list.