# Graph Report - . (2026-04-12) ## Corpus Check - 78 files · ~273,497 words - Verdict: corpus is large enough that graph structure adds value. ## Summary - 480 nodes · 549 edges · 74 communities detected - Extraction: 100% EXTRACTED · 0% INFERRED · 0% AMBIGUOUS - Token cost: 0 input · 0 output ## God Nodes (most connected - your core abstractions) 1. `DefaultRules` - 35 edges 2. `GameEngine` - 29 edges 3. `ChessBoardView` - 17 edges 4. `FenParserFastParse` - 17 edges 5. `FenParserCombinators` - 16 edges 6. `PgnParser` - 14 edges 7. `FenParser` - 9 edges 8. `CommandInvoker` - 9 edges 9. `GameContext` - 8 edges 10. `FenExporter` - 7 edges ## Surprising Connections (you probably didn't know these) - None detected - all connections are within the same source files. ## Communities ### Community 0 - "Community 0" Cohesion: 0.11 Nodes (2): CastlingMove, DefaultRules ### Community 1 - "Community 1" Cohesion: 0.09 Nodes (17): ClassGap, _compact_ranges(), _find_scoverage_xml(), format_agent(), format_json(), format_markdown(), format_module_gaps(), main() (+9 more) ### Community 2 - "Community 2" Cohesion: 0.11 Nodes (2): GameEngine, PendingPromotion ### Community 3 - "Community 3" Cohesion: 0.09 Nodes (4): FenParserCombinators, EmptyToken, FenParserSupport, PieceToken ### Community 4 - "Community 4" Cohesion: 0.14 Nodes (9): format_module(), load_module(), main(), ModuleResult, parse_suite_xml(), run(), SuiteResult, TestCase (+1 more) ### Community 5 - "Community 5" Cohesion: 0.2 Nodes (1): ChessBoardView ### Community 6 - "Community 6" Cohesion: 0.15 Nodes (1): FenParserFastParse ### Community 7 - "Community 7" Cohesion: 0.12 Nodes (7): InvalidFormat, InvalidMove, MoveCommand, MoveResult, QuitCommand, ResetCommand, Successful ### Community 8 - "Community 8" Cohesion: 0.12 Nodes (12): BoardResetEvent, CheckDetectedEvent, CheckmateEvent, DrawClaimedEvent, FiftyMoveRuleAvailableEvent, InvalidMoveEvent, MoveExecutedEvent, MoveRedoneEvent (+4 more) ### Community 9 - "Community 9" Cohesion: 0.26 Nodes (2): PgnGame, PgnParser ### Community 10 - "Community 10" Cohesion: 0.15 Nodes (3): candidateMoves(), GameEngineIntegrationTest, legalMoves() ### Community 11 - "Community 11" Cohesion: 0.14 Nodes (1): GameEnginePromotionTest ### Community 12 - "Community 12" Cohesion: 0.15 Nodes (2): EngineTestHelpers, MockObserver ### Community 13 - "Community 13" Cohesion: 0.17 Nodes (3): CommandInvokerBranchTest, ConditionalFailCommand, FailingCommand ### Community 14 - "Community 14" Cohesion: 0.36 Nodes (1): FenParser ### Community 15 - "Community 15" Cohesion: 0.22 Nodes (1): CommandInvoker ### Community 16 - "Community 16" Cohesion: 0.31 Nodes (5): applyMove(), Board, removed(), updated(), withMove() ### Community 17 - "Community 17" Cohesion: 0.22 Nodes (1): GameContext ### Community 18 - "Community 18" Cohesion: 0.25 Nodes (6): ApiError, ApiResponse, Failure, PagedResponse, Pagination, Success ### Community 19 - "Community 19" Cohesion: 0.43 Nodes (1): FenExporter ### Community 20 - "Community 20" Cohesion: 0.29 Nodes (1): CastlingRights ### Community 21 - "Community 21" Cohesion: 0.4 Nodes (2): ChessGUIApp, ChessGUILauncher ### Community 22 - "Community 22" Cohesion: 0.5 Nodes (2): offset(), Square ### Community 23 - "Community 23" Cohesion: 0.4 Nodes (2): PlayerId, PlayerInfo ### Community 24 - "Community 24" Cohesion: 0.5 Nodes (2): PieceSprites, SquareColors ### Community 25 - "Community 25" Cohesion: 0.6 Nodes (1): TerminalUI ### Community 26 - "Community 26" Cohesion: 0.6 Nodes (1): PgnExporter ### Community 27 - "Community 27" Cohesion: 0.67 Nodes (1): GUIObserver ### Community 28 - "Community 28" Cohesion: 0.5 Nodes (1): DefaultRulesStateTransitionsTest ### Community 29 - "Community 29" Cohesion: 0.5 Nodes (2): EndingMockObserver, GameEngineGameEndingTest ### Community 30 - "Community 30" Cohesion: 0.5 Nodes (2): GameEngineLoadGameTest, MockObserver ### Community 31 - "Community 31" Cohesion: 0.5 Nodes (1): CommandInvokerTest ### Community 32 - "Community 32" Cohesion: 0.67 Nodes (1): Parser ### Community 33 - "Community 33" Cohesion: 0.67 Nodes (0): ### Community 34 - "Community 34" Cohesion: 0.67 Nodes (1): Main ### Community 35 - "Community 35" Cohesion: 0.67 Nodes (1): Renderer ### Community 36 - "Community 36" Cohesion: 0.67 Nodes (1): PgnExporterTest ### Community 37 - "Community 37" Cohesion: 0.67 Nodes (1): FenExporterTest ### Community 38 - "Community 38" Cohesion: 0.67 Nodes (1): GameEngineNotationTest ### Community 39 - "Community 39" Cohesion: 0.67 Nodes (1): MoveCommandTest ### Community 40 - "Community 40" Cohesion: 1.0 Nodes (1): PieceTest ### Community 41 - "Community 41" Cohesion: 1.0 Nodes (1): PieceTypeTest ### Community 42 - "Community 42" Cohesion: 1.0 Nodes (1): SquareTest ### Community 43 - "Community 43" Cohesion: 1.0 Nodes (1): CastlingRightsTest ### Community 44 - "Community 44" Cohesion: 1.0 Nodes (1): BoardTest ### Community 45 - "Community 45" Cohesion: 1.0 Nodes (1): ColorTest ### Community 46 - "Community 46" Cohesion: 1.0 Nodes (1): MoveTest ### Community 47 - "Community 47" Cohesion: 1.0 Nodes (1): GameContextTest ### Community 48 - "Community 48" Cohesion: 1.0 Nodes (1): ApiResponseTest ### Community 49 - "Community 49" Cohesion: 1.0 Nodes (1): PlayerInfoTest ### Community 50 - "Community 50" Cohesion: 1.0 Nodes (0): ### Community 51 - "Community 51" Cohesion: 1.0 Nodes (1): Piece ### Community 52 - "Community 52" Cohesion: 1.0 Nodes (1): Move ### Community 53 - "Community 53" Cohesion: 1.0 Nodes (1): RendererAndUnicodeTest ### Community 54 - "Community 54" Cohesion: 1.0 Nodes (0): ### Community 55 - "Community 55" Cohesion: 1.0 Nodes (1): DefaultRulesTest ### Community 56 - "Community 56" Cohesion: 1.0 Nodes (1): PgnParserTest ### Community 57 - "Community 57" Cohesion: 1.0 Nodes (1): PgnValidatorTest ### Community 58 - "Community 58" Cohesion: 1.0 Nodes (1): FenParserCombinatorsTest ### Community 59 - "Community 59" Cohesion: 1.0 Nodes (1): FenParserTest ### Community 60 - "Community 60" Cohesion: 1.0 Nodes (1): FenParserFastParseTest ### Community 61 - "Community 61" Cohesion: 1.0 Nodes (1): ParserTest ### Community 62 - "Community 62" Cohesion: 1.0 Nodes (1): GameEngineOutcomesTest ### Community 63 - "Community 63" Cohesion: 1.0 Nodes (1): GameEngineSpecialMovesTest ### Community 64 - "Community 64" Cohesion: 1.0 Nodes (1): GameEngineScenarioTest ### Community 65 - "Community 65" Cohesion: 1.0 Nodes (1): CommandTest ### Community 66 - "Community 66" Cohesion: 1.0 Nodes (0): ### Community 67 - "Community 67" Cohesion: 1.0 Nodes (0): ### Community 68 - "Community 68" Cohesion: 1.0 Nodes (0): ### Community 69 - "Community 69" Cohesion: 1.0 Nodes (0): ### Community 70 - "Community 70" Cohesion: 1.0 Nodes (0): ### Community 71 - "Community 71" Cohesion: 1.0 Nodes (1): Strip the package prefix from the full method path. ### Community 72 - "Community 72" Cohesion: 1.0 Nodes (1): Lines that are branch points and have at least one uncovered branch statement. ### Community 73 - "Community 73" Cohesion: 1.0 Nodes (0): ## Knowledge Gaps - **55 isolated node(s):** `PieceTest`, `PieceTypeTest`, `SquareTest`, `CastlingRightsTest`, `BoardTest` (+50 more) These have ≤1 connection - possible missing edges or undocumented components. - **Thin community `Community 40`** (2 nodes): `PieceTest.scala`, `PieceTest` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 41`** (2 nodes): `PieceTypeTest.scala`, `PieceTypeTest` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 42`** (2 nodes): `SquareTest.scala`, `SquareTest` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 43`** (2 nodes): `CastlingRightsTest.scala`, `CastlingRightsTest` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 44`** (2 nodes): `BoardTest.scala`, `BoardTest` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 45`** (2 nodes): `ColorTest.scala`, `ColorTest` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 46`** (2 nodes): `MoveTest.scala`, `MoveTest` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 47`** (2 nodes): `GameContextTest.scala`, `GameContextTest` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 48`** (2 nodes): `ApiResponseTest.scala`, `ApiResponseTest` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 49`** (2 nodes): `PlayerInfoTest.scala`, `PlayerInfoTest` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 50`** (2 nodes): `PieceType.scala`, `label()` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 51`** (2 nodes): `Piece.scala`, `Piece` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 52`** (2 nodes): `Move.scala`, `Move` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 53`** (2 nodes): `RendererAndUnicodeTest.scala`, `RendererAndUnicodeTest` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 54`** (2 nodes): `PieceUnicode.scala`, `unicode()` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 55`** (2 nodes): `DefaultRulesTest.scala`, `DefaultRulesTest` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 56`** (2 nodes): `PgnParserTest.scala`, `PgnParserTest` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 57`** (2 nodes): `PgnValidatorTest.scala`, `PgnValidatorTest` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 58`** (2 nodes): `FenParserCombinatorsTest.scala`, `FenParserCombinatorsTest` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 59`** (2 nodes): `FenParserTest.scala`, `FenParserTest` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 60`** (2 nodes): `FenParserFastParseTest.scala`, `FenParserFastParseTest` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 61`** (2 nodes): `ParserTest.scala`, `ParserTest` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 62`** (2 nodes): `GameEngineOutcomesTest.scala`, `GameEngineOutcomesTest` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 63`** (2 nodes): `GameEngineSpecialMovesTest.scala`, `GameEngineSpecialMovesTest` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 64`** (2 nodes): `GameEngineScenarioTest.scala`, `GameEngineScenarioTest` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 65`** (2 nodes): `CommandTest.scala`, `CommandTest` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 66`** (1 nodes): `build.gradle.kts` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 67`** (1 nodes): `settings.gradle.kts` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 68`** (1 nodes): `RuleSet.scala` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 69`** (1 nodes): `GameContextImport.scala` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 70`** (1 nodes): `GameContextExport.scala` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 71`** (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 72`** (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 73`** (1 nodes): `test_counter.py` 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:_ - **Why does `FenParserFastParse` connect `Community 6` to `Community 3`?** _High betweenness centrality (0.004) - this node is a cross-community bridge._ - **What connects `PieceTest`, `PieceTypeTest`, `SquareTest` to the rest of the system?** _55 weakly-connected nodes found - possible documentation gaps or missing edges._ - **Should `Community 0` 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.09 - nodes in this community are weakly interconnected._ - **Should `Community 2` be split into smaller, more focused modules?** _Cohesion score 0.11 - nodes in this community are weakly interconnected._ - **Should `Community 3` be split into smaller, more focused modules?** _Cohesion score 0.09 - nodes in this community are weakly interconnected._ - **Should `Community 4` be split into smaller, more focused modules?** _Cohesion score 0.14 - nodes in this community are weakly interconnected._