feat: Introduce Participant trait and update GameEngine to support bot participants

This commit is contained in:
2026-04-13 22:11:54 +02:00
parent c88159ecec
commit d6758ed8ec
25 changed files with 2526369 additions and 1672 deletions
+335 -221
View File
@@ -1,11 +1,11 @@
# Graph Report - . (2026-04-13)
## Corpus Check
- 126 files · ~38,514,178 words
- 132 files · ~24,046,508 words
- Verdict: corpus is large enough that graph structure adds value.
## Summary
- 821 nodes · 1008 edges · 128 communities detected
- 899 nodes · 1116 edges · 146 communities detected
- Extraction: 100% EXTRACTED · 0% INFERRED · 0% AMBIGUOUS
- Token cost: 0 input · 0 output
@@ -138,11 +138,29 @@
- [[_COMMUNITY_Community 125|Community 125]]
- [[_COMMUNITY_Community 126|Community 126]]
- [[_COMMUNITY_Community 127|Community 127]]
- [[_COMMUNITY_Community 128|Community 128]]
- [[_COMMUNITY_Community 129|Community 129]]
- [[_COMMUNITY_Community 130|Community 130]]
- [[_COMMUNITY_Community 131|Community 131]]
- [[_COMMUNITY_Community 132|Community 132]]
- [[_COMMUNITY_Community 133|Community 133]]
- [[_COMMUNITY_Community 134|Community 134]]
- [[_COMMUNITY_Community 135|Community 135]]
- [[_COMMUNITY_Community 136|Community 136]]
- [[_COMMUNITY_Community 137|Community 137]]
- [[_COMMUNITY_Community 138|Community 138]]
- [[_COMMUNITY_Community 139|Community 139]]
- [[_COMMUNITY_Community 140|Community 140]]
- [[_COMMUNITY_Community 141|Community 141]]
- [[_COMMUNITY_Community 142|Community 142]]
- [[_COMMUNITY_Community 143|Community 143]]
- [[_COMMUNITY_Community 144|Community 144]]
- [[_COMMUNITY_Community 145|Community 145]]
## God Nodes (most connected - your core abstractions)
1. `GameEngine` - 35 edges
2. `DefaultRules` - 35 edges
3. `NNUE` - 22 edges
1. `DefaultRules` - 35 edges
2. `GameEngine` - 34 edges
3. `NNUE` - 23 edges
4. `EvaluationClassic` - 21 edges
5. `MoveOrdering` - 21 edges
6. `ChessBoardView` - 19 edges
@@ -157,31 +175,31 @@
## Communities
### Community 0 - "Community 0"
Cohesion: 0.09
Nodes (2): GameEngine, PendingPromotion
### Community 1 - "Community 1"
Cohesion: 0.11
Nodes (2): CastlingMove, DefaultRules
### Community 1 - "Community 1"
Cohesion: 0.1
Nodes (2): GameEngine, PendingPromotion
### Community 2 - "Community 2"
Cohesion: 0.09
Nodes (17): ClassGap, _compact_ranges(), _find_scoverage_xml(), format_agent(), format_json(), format_markdown(), format_module_gaps(), main() (+9 more)
### Community 3 - "Community 3"
Cohesion: 0.13
Nodes (30): burst_train_interactive(), create_dataset_interactive(), datasets_menu(), delete_dataset_interactive(), export_interactive(), extend_dataset_interactive(), get_data_dir(), get_weights_dir() (+22 more)
### Community 4 - "Community 4"
Cohesion: 0.14
Nodes (2): MoveOrdering, OrderingContext
### Community 4 - "Community 4"
### Community 5 - "Community 5"
Cohesion: 0.11
Nodes (21): Dataset, burst_train(), fen_to_features(), find_next_version(), NNUE, NNUEDataset, Find the next version number for model versioning. Looks for nnue_weights_v, Save training metadata alongside the weights file. Args: weights_fi (+13 more)
### Community 5 - "Community 5"
Cohesion: 0.16
Nodes (23): burst_train_interactive(), export_interactive(), extract_tactical_interactive(), get_data_dir(), get_tactical_data_dir(), get_weights_dir(), list_checkpoints(), main() (+15 more)
### Community 6 - "Community 6"
Cohesion: 0.22
Cohesion: 0.23
Nodes (1): NNUE
### Community 7 - "Community 7"
@@ -189,432 +207,432 @@ Cohesion: 0.19
Nodes (1): EvaluationClassic
### Community 8 - "Community 8"
Cohesion: 0.15
Nodes (20): create_dataset(), delete_dataset(), extend_dataset(), get_dataset_labeled_path(), get_datasets_dir(), list_datasets(), load_dataset_metadata(), next_dataset_version() (+12 more)
### Community 9 - "Community 9"
Cohesion: 0.14
Nodes (9): format_module(), load_module(), main(), ModuleResult, parse_suite_xml(), run(), SuiteResult, TestCase (+1 more)
### Community 9 - "Community 9"
### Community 10 - "Community 10"
Cohesion: 0.18
Nodes (1): ChessBoardView
### Community 10 - "Community 10"
### Community 11 - "Community 11"
Cohesion: 0.14
Nodes (1): FenParserFastParse
### Community 11 - "Community 11"
### Community 12 - "Community 12"
Cohesion: 0.12
Nodes (7): InvalidFormat, InvalidMove, MoveCommand, MoveResult, QuitCommand, ResetCommand, Successful
### Community 12 - "Community 12"
### Community 13 - "Community 13"
Cohesion: 0.12
Nodes (12): BoardResetEvent, CheckDetectedEvent, CheckmateEvent, DrawClaimedEvent, FiftyMoveRuleAvailableEvent, InvalidMoveEvent, MoveExecutedEvent, MoveRedoneEvent (+4 more)
### Community 13 - "Community 13"
### Community 14 - "Community 14"
Cohesion: 0.13
Nodes (1): FenParserCombinators
### Community 14 - "Community 14"
### Community 15 - "Community 15"
Cohesion: 0.26
Nodes (2): PgnGame, PgnParser
### Community 15 - "Community 15"
### Community 16 - "Community 16"
Cohesion: 0.15
Nodes (3): candidateMoves(), GameEngineIntegrationTest, legalMoves()
### Community 16 - "Community 16"
### Community 17 - "Community 17"
Cohesion: 0.14
Nodes (3): CommandInvokerBranchTest, ConditionalFailCommand, FailingCommand
### Community 17 - "Community 17"
### Community 18 - "Community 18"
Cohesion: 0.14
Nodes (1): GameEnginePromotionTest
### Community 18 - "Community 18"
### Community 19 - "Community 19"
Cohesion: 0.25
Nodes (1): JsonExporter
### Community 19 - "Community 19"
### Community 20 - "Community 20"
Cohesion: 0.21
Nodes (12): download_and_extract_puzzle_db(), extract_puzzle_positions(), extract_tactical_only(), interactive_merge_positions(), load_positions_from_file(), merge_positions(), Load positions from a text file (one FEN per line)., Merge two position sets and write to file. (+4 more)
### Community 21 - "Community 21"
Cohesion: 0.24
Nodes (1): AlphaBetaSearch
### Community 20 - "Community 20"
### Community 22 - "Community 22"
Cohesion: 0.15
Nodes (2): EngineTestHelpers, MockObserver
### Community 21 - "Community 21"
### Community 23 - "Community 23"
Cohesion: 0.33
Nodes (1): ZobristHash
### Community 22 - "Community 22"
Cohesion: 0.24
Nodes (10): download_and_extract_puzzle_db(), extract_puzzle_positions(), interactive_merge_positions(), load_positions_from_file(), merge_positions(), Load positions from a text file (one FEN per line)., Merge two position sets and write to file., Interactive workflow: extract tactical positions and merge with user selection. (+2 more)
### Community 23 - "Community 23"
### Community 24 - "Community 24"
Cohesion: 0.18
Nodes (1): AlphaBetaSearchTest
### Community 24 - "Community 24"
### Community 25 - "Community 25"
Cohesion: 0.18
Nodes (1): ClassicalBotTest
### Community 25 - "Community 25"
### Community 26 - "Community 26"
Cohesion: 0.33
Nodes (2): BookEntry, PolyglotBook
### Community 26 - "Community 26"
### Community 27 - "Community 27"
Cohesion: 0.22
Nodes (1): CommandInvoker
### Community 27 - "Community 27"
### Community 28 - "Community 28"
Cohesion: 0.36
Nodes (1): FenParser
### Community 28 - "Community 28"
### Community 29 - "Community 29"
Cohesion: 0.31
Nodes (1): JsonParser
### Community 29 - "Community 29"
### Community 30 - "Community 30"
Cohesion: 0.31
Nodes (5): applyMove(), Board, removed(), updated(), withMove()
### Community 30 - "Community 30"
### Community 31 - "Community 31"
Cohesion: 0.22
Nodes (1): GameContext
### Community 31 - "Community 31"
### Community 32 - "Community 32"
Cohesion: 0.25
Nodes (6): ApiError, ApiResponse, Failure, PagedResponse, Pagination, Success
### Community 32 - "Community 32"
### Community 33 - "Community 33"
Cohesion: 0.39
Nodes (1): NbaiLoader
### Community 34 - "Community 34"
Cohesion: 0.22
Nodes (8): JsonCapturedPieces, JsonCastlingRights, JsonGameRecord, JsonGameState, JsonMetadata, JsonMove, JsonMoveType, JsonPiece
### Community 33 - "Community 33"
### Community 35 - "Community 35"
Cohesion: 0.46
Nodes (1): NbaiWriter
### Community 36 - "Community 36"
Cohesion: 0.43
Nodes (1): FenExporter
### Community 34 - "Community 34"
### Community 37 - "Community 37"
Cohesion: 0.29
Nodes (1): CastlingRights
### Community 35 - "Community 35"
### Community 38 - "Community 38"
Cohesion: 0.33
Nodes (6): _evaluate_fen_batch(), label_positions_with_stockfish(), normalize_evaluation(), Normalize centipawn evaluation to a bounded range. Args: cp_value:, Worker function to evaluate a batch of FENs with Stockfish threading. Args:, Read positions and label them with Stockfish evaluations. Args: pos
### Community 36 - "Community 36"
### Community 39 - "Community 39"
Cohesion: 0.29
Nodes (1): EvaluationNNUE
### Community 37 - "Community 37"
### Community 40 - "Community 40"
Cohesion: 0.29
Nodes (4): LayerDescriptor, LayerWeights, NbaiMetadata, NbaiModel
### Community 41 - "Community 41"
Cohesion: 0.53
Nodes (5): export_to_nbai(), _infer_layers(), Derive layer descriptors from state_dict weight shapes. Assumes layers name, _read_sidecar(), _write_floats()
### Community 42 - "Community 42"
Cohesion: 0.53
Nodes (1): NbaiMigrator
### Community 43 - "Community 43"
Cohesion: 0.33
Nodes (2): TranspositionTable, TTEntry
### Community 38 - "Community 38"
### Community 44 - "Community 44"
Cohesion: 0.53
Nodes (1): PolyglotHash
### Community 39 - "Community 39"
### Community 45 - "Community 45"
Cohesion: 0.4
Nodes (2): ChessGUIApp, ChessGUILauncher
### Community 40 - "Community 40"
### Community 46 - "Community 46"
Cohesion: 0.5
Nodes (2): offset(), Square
### Community 41 - "Community 41"
### Community 47 - "Community 47"
Cohesion: 0.4
Nodes (2): PlayerId, PlayerInfo
### Community 42 - "Community 42"
### Community 48 - "Community 48"
Cohesion: 0.4
Nodes (4): play_random_game_and_collect_positions(), Generate games for one worker. Returns: list of FENs generated by t, Generate positions using multiprocessing with multiple workers. Args:, _worker_generate_games()
### Community 43 - "Community 43"
### Community 49 - "Community 49"
Cohesion: 0.4
Nodes (0):
### Community 44 - "Community 44"
### Community 50 - "Community 50"
Cohesion: 0.6
Nodes (1): NNUEBot
### Community 45 - "Community 45"
### Community 51 - "Community 51"
Cohesion: 0.4
Nodes (3): EmptyToken, FenParserSupport, PieceToken
### Community 46 - "Community 46"
### Community 52 - "Community 52"
Cohesion: 0.6
Nodes (1): PgnExporter
### Community 47 - "Community 47"
### Community 53 - "Community 53"
Cohesion: 0.5
Nodes (2): PieceSprites, SquareColors
### Community 48 - "Community 48"
### Community 54 - "Community 54"
Cohesion: 0.6
Nodes (1): TerminalUI
### Community 49 - "Community 49"
### Community 55 - "Community 55"
Cohesion: 0.5
Nodes (1): BotController
### Community 50 - "Community 50"
### Community 56 - "Community 56"
Cohesion: 0.67
Nodes (1): HybridBot
### Community 51 - "Community 51"
### Community 57 - "Community 57"
Cohesion: 0.67
Nodes (1): Parser
### Community 52 - "Community 52"
### Community 58 - "Community 58"
Cohesion: 0.5
Nodes (1): CommandInvokerTest
### Community 53 - "Community 53"
### Community 59 - "Community 59"
Cohesion: 0.5
Nodes (2): EndingMockObserver, GameEngineGameEndingTest
### Community 54 - "Community 54"
### Community 60 - "Community 60"
Cohesion: 0.5
Nodes (2): GameEngineLoadGameTest, MockObserver
### Community 55 - "Community 55"
### Community 61 - "Community 61"
Cohesion: 0.5
Nodes (1): FileSystemGameService
### Community 56 - "Community 56"
### Community 62 - "Community 62"
Cohesion: 0.5
Nodes (1): DefaultRulesStateTransitionsTest
### Community 57 - "Community 57"
### Community 63 - "Community 63"
Cohesion: 0.67
Nodes (1): GUIObserver
### Community 58 - "Community 58"
Cohesion: 0.67
Nodes (0):
### Community 59 - "Community 59"
Cohesion: 0.67
Nodes (2): export_weights_to_binary(), Load PyTorch weights and export as binary file.
### Community 60 - "Community 60"
Cohesion: 0.67
Nodes (1): ClassicalBot
### Community 61 - "Community 61"
Cohesion: 0.67
Nodes (1): MoveCommandTest
### Community 62 - "Community 62"
Cohesion: 0.67
Nodes (1): GameEngineNotationTest
### Community 63 - "Community 63"
Cohesion: 0.67
Nodes (1): GameEngineWithBotTest
### Community 64 - "Community 64"
Cohesion: 0.67
Nodes (1): GameFileServiceSuite
Nodes (0):
### Community 65 - "Community 65"
Cohesion: 0.67
Nodes (1): FenExporterTest
Nodes (1): ClassicalBot
### Community 66 - "Community 66"
Cohesion: 0.67
Nodes (1): PgnExporterTest
Nodes (2): BotParticipant, Human
### Community 67 - "Community 67"
Cohesion: 0.67
Nodes (1): Main
Nodes (1): MoveCommandTest
### Community 68 - "Community 68"
Cohesion: 0.67
Nodes (1): Renderer
Nodes (1): GameEngineNotationTest
### Community 69 - "Community 69"
Cohesion: 1.0
Nodes (1): Piece
Cohesion: 0.67
Nodes (1): GameEngineWithBotTest
### Community 70 - "Community 70"
Cohesion: 1.0
Nodes (0):
Cohesion: 0.67
Nodes (1): GameFileServiceSuite
### Community 71 - "Community 71"
Cohesion: 1.0
Nodes (1): Move
Cohesion: 0.67
Nodes (1): FenExporterTest
### Community 72 - "Community 72"
Cohesion: 1.0
Nodes (1): BoardTest
Cohesion: 0.67
Nodes (1): PgnExporterTest
### Community 73 - "Community 73"
Cohesion: 1.0
Nodes (1): CastlingRightsTest
Cohesion: 0.67
Nodes (1): Main
### Community 74 - "Community 74"
Cohesion: 1.0
Nodes (1): ColorTest
Cohesion: 0.67
Nodes (1): Renderer
### Community 75 - "Community 75"
Cohesion: 1.0
Nodes (1): PieceTest
Nodes (1): Piece
### Community 76 - "Community 76"
Cohesion: 1.0
Nodes (1): PieceTypeTest
Nodes (0):
### Community 77 - "Community 77"
Cohesion: 1.0
Nodes (1): SquareTest
Nodes (1): Move
### Community 78 - "Community 78"
Cohesion: 1.0
Nodes (1): GameContextTest
Nodes (1): BoardTest
### Community 79 - "Community 79"
Cohesion: 1.0
Nodes (1): MoveTest
Nodes (1): CastlingRightsTest
### Community 80 - "Community 80"
Cohesion: 1.0
Nodes (1): PlayerInfoTest
Nodes (1): ColorTest
### Community 81 - "Community 81"
Cohesion: 1.0
Nodes (1): ApiResponseTest
Nodes (1): PieceTest
### Community 82 - "Community 82"
Cohesion: 1.0
Nodes (1): Config
Nodes (1): PieceTypeTest
### Community 83 - "Community 83"
Cohesion: 1.0
Nodes (1): BotControllerTest
Nodes (1): SquareTest
### Community 84 - "Community 84"
Cohesion: 1.0
Nodes (1): BotDifficultyTest
Nodes (1): GameContextTest
### Community 85 - "Community 85"
Cohesion: 1.0
Nodes (1): EvaluationTest
Nodes (1): MoveTest
### Community 86 - "Community 86"
Cohesion: 1.0
Nodes (1): MoveOrderingTest
Nodes (1): PlayerInfoTest
### Community 87 - "Community 87"
Cohesion: 1.0
Nodes (1): PolyglotBookTest
Nodes (1): ApiResponseTest
### Community 88 - "Community 88"
Cohesion: 1.0
Nodes (1): PolyglotHashTest
Nodes (1): Config
### Community 89 - "Community 89"
Cohesion: 1.0
Nodes (1): TranspositionTableTest
Nodes (1): BotControllerTest
### Community 90 - "Community 90"
Cohesion: 1.0
Nodes (1): ZobristHashTest
Nodes (1): BotDifficultyTest
### Community 91 - "Community 91"
Cohesion: 1.0
Nodes (1): CommandTest
Nodes (1): EvaluationTest
### Community 92 - "Community 92"
Cohesion: 1.0
Nodes (1): ParserTest
Nodes (1): MoveOrderingTest
### Community 93 - "Community 93"
Cohesion: 1.0
Nodes (1): GameEngineOutcomesTest
Nodes (1): PolyglotBookTest
### Community 94 - "Community 94"
Cohesion: 1.0
Nodes (1): GameEngineScenarioTest
Nodes (1): PolyglotHashTest
### Community 95 - "Community 95"
Cohesion: 1.0
Nodes (1): GameEngineSpecialMovesTest
Nodes (1): TranspositionTableTest
### Community 96 - "Community 96"
Cohesion: 1.0
Nodes (1): FenParserCombinatorsTest
Nodes (1): ZobristHashTest
### Community 97 - "Community 97"
Cohesion: 1.0
Nodes (1): FenParserFastParseTest
Nodes (1): CommandTest
### Community 98 - "Community 98"
Cohesion: 1.0
Nodes (1): FenParserTest
Nodes (1): ParserTest
### Community 99 - "Community 99"
Cohesion: 1.0
Nodes (1): JsonExporterBranchCoverageSuite
Nodes (1): GameEngineOutcomesTest
### Community 100 - "Community 100"
Cohesion: 1.0
Nodes (1): JsonExporterSuite
Nodes (1): GameEngineScenarioTest
### Community 101 - "Community 101"
Cohesion: 1.0
Nodes (1): JsonModelExtraTestSuite
Nodes (1): GameEngineSpecialMovesTest
### Community 102 - "Community 102"
Cohesion: 1.0
Nodes (1): JsonParserEdgeCasesSuite
Nodes (1): FenParserCombinatorsTest
### Community 103 - "Community 103"
Cohesion: 1.0
Nodes (1): JsonParserErrorHandlingSuite
Nodes (1): FenParserFastParseTest
### Community 104 - "Community 104"
Cohesion: 1.0
Nodes (1): JsonParserMoveTypeSuite
Nodes (1): FenParserTest
### Community 105 - "Community 105"
Cohesion: 1.0
Nodes (1): JsonParserSuite
Nodes (1): JsonExporterBranchCoverageSuite
### Community 106 - "Community 106"
Cohesion: 1.0
Nodes (1): PgnParserTest
Nodes (1): JsonExporterSuite
### Community 107 - "Community 107"
Cohesion: 1.0
Nodes (1): PgnValidatorTest
Nodes (1): JsonModelExtraTestSuite
### Community 108 - "Community 108"
Cohesion: 1.0
Nodes (1): DefaultRulesTest
Nodes (1): JsonParserEdgeCasesSuite
### Community 109 - "Community 109"
Cohesion: 1.0
Nodes (0):
Nodes (1): JsonParserErrorHandlingSuite
### Community 110 - "Community 110"
Cohesion: 1.0
Nodes (1): RendererAndUnicodeTest
Nodes (1): JsonParserMoveTypeSuite
### Community 111 - "Community 111"
Cohesion: 1.0
Nodes (0):
Nodes (1): JsonParserSuite
### Community 112 - "Community 112"
Cohesion: 1.0
Nodes (0):
Nodes (1): PgnParserTest
### Community 113 - "Community 113"
Cohesion: 1.0
Nodes (1): Strip the package prefix from the full method path.
Nodes (1): PgnValidatorTest
### Community 114 - "Community 114"
Cohesion: 1.0
Nodes (1): Lines that are branch points and have at least one uncovered branch statement.
Nodes (1): DefaultRulesTest
### Community 115 - "Community 115"
Cohesion: 1.0
@@ -622,7 +640,7 @@ Nodes (0):
### Community 116 - "Community 116"
Cohesion: 1.0
Nodes (0):
Nodes (1): RendererAndUnicodeTest
### Community 117 - "Community 117"
Cohesion: 1.0
@@ -634,11 +652,11 @@ Nodes (0):
### Community 119 - "Community 119"
Cohesion: 1.0
Nodes (0):
Nodes (1): Strip the package prefix from the full method path.
### Community 120 - "Community 120"
Cohesion: 1.0
Nodes (0):
Nodes (1): Lines that are branch points and have at least one uncovered branch statement.
### Community 121 - "Community 121"
Cohesion: 1.0
@@ -668,142 +686,238 @@ Nodes (0):
Cohesion: 1.0
Nodes (0):
### Community 128 - "Community 128"
Cohesion: 1.0
Nodes (0):
### Community 129 - "Community 129"
Cohesion: 1.0
Nodes (0):
### Community 130 - "Community 130"
Cohesion: 1.0
Nodes (0):
### Community 131 - "Community 131"
Cohesion: 1.0
Nodes (0):
### Community 132 - "Community 132"
Cohesion: 1.0
Nodes (0):
### Community 133 - "Community 133"
Cohesion: 1.0
Nodes (0):
### Community 134 - "Community 134"
Cohesion: 1.0
Nodes (1): Get/create data directory.
### Community 135 - "Community 135"
Cohesion: 1.0
Nodes (1): Get/create data directory.
### Community 136 - "Community 136"
Cohesion: 1.0
Nodes (1): Get/create weights directory.
### Community 137 - "Community 137"
Cohesion: 1.0
Nodes (1): List available checkpoint versions.
### Community 138 - "Community 138"
Cohesion: 1.0
Nodes (1): Display application header.
### Community 139 - "Community 139"
Cohesion: 1.0
Nodes (1): Display available checkpoints in a table.
### Community 140 - "Community 140"
Cohesion: 1.0
Nodes (1): Display and handle main menu.
### Community 141 - "Community 141"
Cohesion: 1.0
Nodes (1): Interactive training menu.
### Community 142 - "Community 142"
Cohesion: 1.0
Nodes (1): Interactive burst training menu.
### Community 143 - "Community 143"
Cohesion: 1.0
Nodes (1): Interactive export menu.
### Community 144 - "Community 144"
Cohesion: 1.0
Nodes (1): Interactive tactical positions extraction and merge menu.
### Community 145 - "Community 145"
Cohesion: 1.0
Nodes (1): Load PyTorch weights and export as binary file.
## Knowledge Gaps
- **116 isolated node(s):** `Strip the package prefix from the full method path.`, `Lines that are branch points and have at least one uncovered branch statement.`, `[1,2,3,5,7,8,9] → '1-3, 5, 7-9`, `Compact agent format — optimised for low token count. Emits only actionable`, `Return the first scoverage.xml found inside *module_dir*, or None.` (+111 more)
- **147 isolated node(s):** `Strip the package prefix from the full method path.`, `Lines that are branch points and have at least one uncovered branch statement.`, `[1,2,3,5,7,8,9] → '1-3, 5, 7-9`, `Compact agent format — optimised for low token count. Emits only actionable`, `Return the first scoverage.xml found inside *module_dir*, or None.` (+142 more)
These have ≤1 connection - possible missing edges or undocumented components.
- **Thin community `Community 69`** (2 nodes): `Piece.scala`, `Piece`
- **Thin community `Community 75`** (2 nodes): `Piece.scala`, `Piece`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 70`** (2 nodes): `PieceType.scala`, `label()`
- **Thin community `Community 76`** (2 nodes): `PieceType.scala`, `label()`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 71`** (2 nodes): `Move.scala`, `Move`
- **Thin community `Community 77`** (2 nodes): `Move.scala`, `Move`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 72`** (2 nodes): `BoardTest`, `BoardTest.scala`
- **Thin community `Community 78`** (2 nodes): `BoardTest`, `BoardTest.scala`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 73`** (2 nodes): `CastlingRightsTest`, `CastlingRightsTest.scala`
- **Thin community `Community 79`** (2 nodes): `CastlingRightsTest`, `CastlingRightsTest.scala`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 74`** (2 nodes): `ColorTest`, `ColorTest.scala`
- **Thin community `Community 80`** (2 nodes): `ColorTest`, `ColorTest.scala`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 75`** (2 nodes): `PieceTest.scala`, `PieceTest`
- **Thin community `Community 81`** (2 nodes): `PieceTest.scala`, `PieceTest`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 76`** (2 nodes): `PieceTypeTest.scala`, `PieceTypeTest`
- **Thin community `Community 82`** (2 nodes): `PieceTypeTest.scala`, `PieceTypeTest`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 77`** (2 nodes): `SquareTest.scala`, `SquareTest`
- **Thin community `Community 83`** (2 nodes): `SquareTest.scala`, `SquareTest`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 78`** (2 nodes): `GameContextTest`, `GameContextTest.scala`
- **Thin community `Community 84`** (2 nodes): `GameContextTest`, `GameContextTest.scala`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 79`** (2 nodes): `MoveTest.scala`, `MoveTest`
- **Thin community `Community 85`** (2 nodes): `MoveTest.scala`, `MoveTest`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 80`** (2 nodes): `PlayerInfoTest.scala`, `PlayerInfoTest`
- **Thin community `Community 86`** (2 nodes): `PlayerInfoTest.scala`, `PlayerInfoTest`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 81`** (2 nodes): `ApiResponseTest`, `ApiResponseTest.scala`
- **Thin community `Community 87`** (2 nodes): `ApiResponseTest`, `ApiResponseTest.scala`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 82`** (2 nodes): `Config`, `Config.scala`
- **Thin community `Community 88`** (2 nodes): `Config`, `Config.scala`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 83`** (2 nodes): `BotControllerTest`, `BotControllerTest.scala`
- **Thin community `Community 89`** (2 nodes): `BotControllerTest`, `BotControllerTest.scala`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 84`** (2 nodes): `BotDifficultyTest`, `BotDifficultyTest.scala`
- **Thin community `Community 90`** (2 nodes): `BotDifficultyTest`, `BotDifficultyTest.scala`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 85`** (2 nodes): `EvaluationTest`, `EvaluationTest.scala`
- **Thin community `Community 91`** (2 nodes): `EvaluationTest`, `EvaluationTest.scala`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 86`** (2 nodes): `MoveOrderingTest.scala`, `MoveOrderingTest`
- **Thin community `Community 92`** (2 nodes): `MoveOrderingTest.scala`, `MoveOrderingTest`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 87`** (2 nodes): `PolyglotBookTest.scala`, `PolyglotBookTest`
- **Thin community `Community 93`** (2 nodes): `PolyglotBookTest.scala`, `PolyglotBookTest`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 88`** (2 nodes): `PolyglotHashTest.scala`, `PolyglotHashTest`
- **Thin community `Community 94`** (2 nodes): `PolyglotHashTest.scala`, `PolyglotHashTest`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 89`** (2 nodes): `TranspositionTableTest.scala`, `TranspositionTableTest`
- **Thin community `Community 95`** (2 nodes): `TranspositionTableTest.scala`, `TranspositionTableTest`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 90`** (2 nodes): `ZobristHashTest.scala`, `ZobristHashTest`
- **Thin community `Community 96`** (2 nodes): `ZobristHashTest.scala`, `ZobristHashTest`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 91`** (2 nodes): `CommandTest`, `CommandTest.scala`
- **Thin community `Community 97`** (2 nodes): `CommandTest`, `CommandTest.scala`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 92`** (2 nodes): `ParserTest.scala`, `ParserTest`
- **Thin community `Community 98`** (2 nodes): `ParserTest.scala`, `ParserTest`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 93`** (2 nodes): `GameEngineOutcomesTest`, `GameEngineOutcomesTest.scala`
- **Thin community `Community 99`** (2 nodes): `GameEngineOutcomesTest`, `GameEngineOutcomesTest.scala`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 94`** (2 nodes): `GameEngineScenarioTest`, `GameEngineScenarioTest.scala`
- **Thin community `Community 100`** (2 nodes): `GameEngineScenarioTest`, `GameEngineScenarioTest.scala`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 95`** (2 nodes): `GameEngineSpecialMovesTest`, `GameEngineSpecialMovesTest.scala`
- **Thin community `Community 101`** (2 nodes): `GameEngineSpecialMovesTest`, `GameEngineSpecialMovesTest.scala`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 96`** (2 nodes): `FenParserCombinatorsTest`, `FenParserCombinatorsTest.scala`
- **Thin community `Community 102`** (2 nodes): `FenParserCombinatorsTest`, `FenParserCombinatorsTest.scala`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 97`** (2 nodes): `FenParserFastParseTest`, `FenParserFastParseTest.scala`
- **Thin community `Community 103`** (2 nodes): `FenParserFastParseTest`, `FenParserFastParseTest.scala`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 98`** (2 nodes): `FenParserTest`, `FenParserTest.scala`
- **Thin community `Community 104`** (2 nodes): `FenParserTest`, `FenParserTest.scala`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 99`** (2 nodes): `JsonExporterBranchCoverageSuite`, `JsonExporterBranchCoverageSuite.scala`
- **Thin community `Community 105`** (2 nodes): `JsonExporterBranchCoverageSuite`, `JsonExporterBranchCoverageSuite.scala`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 100`** (2 nodes): `JsonExporterSuite`, `JsonExporterSuite.scala`
- **Thin community `Community 106`** (2 nodes): `JsonExporterSuite`, `JsonExporterSuite.scala`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 101`** (2 nodes): `JsonModelExtraTestSuite`, `JsonModelExtraTestSuite.scala`
- **Thin community `Community 107`** (2 nodes): `JsonModelExtraTestSuite`, `JsonModelExtraTestSuite.scala`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 102`** (2 nodes): `JsonParserEdgeCasesSuite`, `JsonParserEdgeCasesSuite.scala`
- **Thin community `Community 108`** (2 nodes): `JsonParserEdgeCasesSuite`, `JsonParserEdgeCasesSuite.scala`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 103`** (2 nodes): `JsonParserErrorHandlingSuite`, `JsonParserErrorHandlingSuite.scala`
- **Thin community `Community 109`** (2 nodes): `JsonParserErrorHandlingSuite`, `JsonParserErrorHandlingSuite.scala`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 104`** (2 nodes): `JsonParserMoveTypeSuite`, `JsonParserMoveTypeSuite.scala`
- **Thin community `Community 110`** (2 nodes): `JsonParserMoveTypeSuite`, `JsonParserMoveTypeSuite.scala`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 105`** (2 nodes): `JsonParserSuite`, `JsonParserSuite.scala`
- **Thin community `Community 111`** (2 nodes): `JsonParserSuite`, `JsonParserSuite.scala`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 106`** (2 nodes): `PgnParserTest.scala`, `PgnParserTest`
- **Thin community `Community 112`** (2 nodes): `PgnParserTest.scala`, `PgnParserTest`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 107`** (2 nodes): `PgnValidatorTest.scala`, `PgnValidatorTest`
- **Thin community `Community 113`** (2 nodes): `PgnValidatorTest.scala`, `PgnValidatorTest`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 108`** (2 nodes): `DefaultRulesTest`, `DefaultRulesTest.scala`
- **Thin community `Community 114`** (2 nodes): `DefaultRulesTest`, `DefaultRulesTest.scala`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 109`** (2 nodes): `PieceUnicode.scala`, `unicode()`
- **Thin community `Community 115`** (2 nodes): `PieceUnicode.scala`, `unicode()`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 110`** (2 nodes): `RendererAndUnicodeTest.scala`, `RendererAndUnicodeTest`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 111`** (1 nodes): `build.gradle.kts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 112`** (1 nodes): `settings.gradle.kts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 113`** (1 nodes): `Strip the package prefix from the full method path.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 114`** (1 nodes): `Lines that are branch points and have at least one uncovered branch statement.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 115`** (1 nodes): `test_counter.py`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 116`** (1 nodes): `build.gradle.kts`
- **Thin community `Community 116`** (2 nodes): `RendererAndUnicodeTest.scala`, `RendererAndUnicodeTest`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 117`** (1 nodes): `build.gradle.kts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 118`** (1 nodes): `start.ps1`
- **Thin community `Community 118`** (1 nodes): `settings.gradle.kts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 119`** (1 nodes): `Bot.scala`
- **Thin community `Community 119`** (1 nodes): `Strip the package prefix from the full method path.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 120`** (1 nodes): `BotDifficulty.scala`
- **Thin community `Community 120`** (1 nodes): `Lines that are branch points and have at least one uncovered branch statement.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 121`** (1 nodes): `build.gradle.kts`
- **Thin community `Community 121`** (1 nodes): `test_counter.py`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 122`** (1 nodes): `build.gradle.kts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 123`** (1 nodes): `GameContextExport.scala`
- **Thin community `Community 123`** (1 nodes): `build.gradle.kts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 124`** (1 nodes): `GameContextImport.scala`
- **Thin community `Community 124`** (1 nodes): `start.ps1`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 125`** (1 nodes): `build.gradle.kts`
- **Thin community `Community 125`** (1 nodes): `Bot.scala`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 126`** (1 nodes): `RuleSet.scala`
- **Thin community `Community 126`** (1 nodes): `BotDifficulty.scala`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 127`** (1 nodes): `build.gradle.kts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 128`** (1 nodes): `build.gradle.kts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 129`** (1 nodes): `GameContextExport.scala`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 130`** (1 nodes): `GameContextImport.scala`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 131`** (1 nodes): `build.gradle.kts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 132`** (1 nodes): `RuleSet.scala`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 133`** (1 nodes): `build.gradle.kts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 134`** (1 nodes): `Get/create data directory.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 135`** (1 nodes): `Get/create data directory.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 136`** (1 nodes): `Get/create weights directory.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 137`** (1 nodes): `List available checkpoint versions.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 138`** (1 nodes): `Display application header.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 139`** (1 nodes): `Display available checkpoints in a table.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 140`** (1 nodes): `Display and handle main menu.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 141`** (1 nodes): `Interactive training menu.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 142`** (1 nodes): `Interactive burst training menu.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 143`** (1 nodes): `Interactive export menu.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 144`** (1 nodes): `Interactive tactical positions extraction and merge menu.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 145`** (1 nodes): `Load PyTorch weights and export as binary file.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
## Suggested Questions
_Questions this graph is uniquely positioned to answer:_
- **What connects `Strip the package prefix from the full method path.`, `Lines that are branch points and have at least one uncovered branch statement.`, `[1,2,3,5,7,8,9] → '1-3, 5, 7-9` to the rest of the system?**
_116 weakly-connected nodes found - possible documentation gaps or missing edges._
_147 weakly-connected nodes found - possible documentation gaps or missing edges._
- **Should `Community 0` be split into smaller, more focused modules?**
_Cohesion score 0.09 - nodes in this community are weakly interconnected._
- **Should `Community 1` be split into smaller, more focused modules?**
_Cohesion score 0.11 - nodes in this community are weakly interconnected._
- **Should `Community 1` be split into smaller, more focused modules?**
_Cohesion score 0.1 - nodes in this community are weakly interconnected._
- **Should `Community 2` be split into smaller, more focused modules?**
_Cohesion score 0.09 - nodes in this community are weakly interconnected._
- **Should `Community 3` be split into smaller, more focused modules?**
_Cohesion score 0.14 - nodes in this community are weakly interconnected._
_Cohesion score 0.13 - nodes in this community are weakly interconnected._
- **Should `Community 4` be split into smaller, more focused modules?**
_Cohesion score 0.11 - nodes in this community are weakly interconnected._
- **Should `Community 8` be split into smaller, more focused modules?**
_Cohesion score 0.14 - nodes in this community are weakly interconnected._
_Cohesion score 0.14 - nodes in this community are weakly interconnected._
- **Should `Community 5` be split into smaller, more focused modules?**
_Cohesion score 0.11 - nodes in this community are weakly interconnected._