app/game_analysis.h
the artifact a review renders (review-docs/PLAN.md §5).
Deliberately separate from game_analyzer.h, which produces one: the store, the uploader and the GUI all consume analyses, and none of them should have to drag in an engine to do it.
EVERY SCORE HERE IS WHITE-RELATIVE. The search works in side-to-move-relative scores; that convention is normalized away exactly once, at the engine seam (LinkedEngine::analyze), because an eval graph plotted from side-to-move scores is a sawtooth of lies rather than a line.
-
namespace kirin
Enums
-
enum class MoveQuality
Values:
-
enumerator Best
-
enumerator Good
-
enumerator Inaccuracy
-
enumerator Mistake
-
enumerator Blunder
-
struct GameAnalysis
#include <game_analysis.h>
Public Members
-
std::string engineVersion
-
long nodesPerMove = 0
-
int analysisVersion = 1
-
std::vector<PlyAnalysis> plies
-
int acplWhite = 0
-
int acplBlack = 0
-
bool complete = false
-
struct PlyAnalysis
#include <game_analysis.h>
Public Members
-
int ply = 0
-
std::string uci
-
char mover = 'w'
-
int evalCp = 0
-
std::optional<int> mateIn
-
std::string bestUci
-
std::string pvUci
-
int lossCp = 0
-
MoveQuality quality = MoveQuality::Good