Stage 2: engine package over scrabble-solver (registry, bag, Game, replay)
backend/internal/engine wraps the sibling scrabble-solver library in-process: - Registry: versioned DAWG load via dafsa.Load, keyed by (variant, dict_version), latest-per-variant; English / Russian / Эрудит handled uniformly. - Bag: own deterministic, seeded tile bag with Draw + Return (for exchanges), since the solver's self-play bag cannot return tiles. - Game: pure rules engine — deal, play/pass/exchange/resign, refill, per-move scoring, turn order, and end-condition detection (empty bag + empty rack, six scoreless turns, resignation) with end-game rack adjustment. - decode/ReplayBoard: dictionary-independent MoveRecords and board replay via scrabble.Apply (no internal/encoding), realising ARCHITECTURE §9.1. Wiring: go.work gains "replace scrabble-solver => ../scrabble-solver"; backend requires scrabble-solver (placeholder) and github.com/iliadenisov/dafsa directly. Both Go CI workflows clone the public solver sibling (master HEAD, no token) and set BACKEND_DICT_DIR. Docs: ARCHITECTURE §5/§14, TESTING engine layer, backend README, and PLAN refinements + deferred TODOs (publish/version solver; split engine vs dictionary generator).
This commit is contained in:
@@ -1,3 +1,9 @@
|
||||
go 1.26.3
|
||||
|
||||
use ./backend
|
||||
|
||||
// The scrabble-solver engine is consumed in-process as a library. Its module
|
||||
// path is the bare "scrabble-solver" (not a URL), so it cannot be fetched as a
|
||||
// versioned dependency via VCS; the workspace points it at the sibling checkout.
|
||||
// CI clones that sibling next to this repository before building.
|
||||
replace scrabble-solver => ../scrabble-solver
|
||||
|
||||
Reference in New Issue
Block a user