Solver contract

Updated Jul 16, 2026

Tour construction is delegated to the Solver trait. Consumers build a SolveRequest that includes a start coordinate, visit duration (minutes), an interest profile, a random seed for deterministic behaviour, and an optional max_nodes pruning hint for candidate selection. Call SolveRequest::validate to enforce the implemented invariants: non-zero duration, finite coordinates, and a positive max_nodes value when set. Successful solvers return SolveResponse, which packages the chosen Route and its aggregate score. Invalid inputs must produce SolveError::InvalidRequest instead of panicking. Placeholder solvers may return SolveError::NotImplemented until a backend is available.[^6]