Publish as versioned Gitea module; move dictionary pipeline out

- Rename module to gitea.iliadenisov.ru/developer/scrabble-solver so it can be
  consumed as a versioned dependency (no go.work replace / CI clone).
- De-internalize wordlist and dictdawg as public packages.
- Remove cmd/builddict, dictprep/, the dictionaries submodule and the dawg
  Makefile: the word-list parsing and DAWG build now live in the separate
  scrabble-dictionary repository, which publishes the DAWG set as a release artifact.
- internal/dict loads the committed dawg/en_sowpods.dawg fixture for cmd/stress.
- Update README/CLAUDE docs accordingly.
This commit is contained in:
Ilia Denisov
2026-06-04 19:11:46 +02:00
parent 63a7c663bf
commit 256999b42c
41 changed files with 93 additions and 402477 deletions
+5 -5
View File
@@ -8,9 +8,9 @@ import (
"strings"
"testing"
"scrabble-solver/board"
"scrabble-solver/internal/dictdawg"
"scrabble-solver/rules"
"gitea.iliadenisov.ru/developer/scrabble-solver/board"
"gitea.iliadenisov.ru/developer/scrabble-solver/dictdawg"
"gitea.iliadenisov.ru/developer/scrabble-solver/rules"
)
// TestScoreRealGames replays real tournament games recorded in GCG format and checks that
@@ -19,11 +19,11 @@ import (
//
// The games come from cross-tables.com (annotated self-play) and are stored under
// testdata/. They use the standard English board and SOWPODS, so the test loads the
// committed dawg/en_sowpods.dawg (build it with `make dawg`).
// committed dawg/en_sowpods.dawg.
func TestScoreRealGames(t *testing.T) {
finder, err := dictdawg.Load("../dawg/en_sowpods.dawg")
if err != nil {
t.Skipf("need dawg/en_sowpods.dawg (run `make dawg`): %v", err)
t.Skipf("need dawg/en_sowpods.dawg: %v", err)
}
s := NewSolver(rules.English(), finder)
games, _ := filepath.Glob("testdata/*.gcg")