Compare commits

...

17 Commits

Author SHA1 Message Date
Janis dbcafd2869 feat: NCS-29 JSON - Cherry Picked (#28)
Build & Test (NowChessSystems) TeamCity build finished
Reviewed-on: #28
Reviewed-by: Shahd Lala <shosho996@blackhole.local>
Co-authored-by: Janis <janis.e.20@gmx.de>
Co-committed-by: Janis <janis.e.20@gmx.de>
2026-04-12 19:36:02 +02:00
TeamCity 3ecb2c9d66 ci: bump version with Build-37 2026-04-12 15:20:01 +00:00
lq64 9ad11fb97a docs: NCS-36 Added an API spec for Now Chess (#25)
Build & Test (NowChessSystems) TeamCity build finished
## Summary
  - Adds `docs/api-spec.yaml` — a full OpenAPI 3.0.3 specification for the NowChess REST API
  - Endpoint paths follow the lichess `board/bot` split convention (`/api/board/game/...`)
    to leave room for a future bot API under `/api/bot/game/...`
  - Covers game lifecycle, move-making, draw handling, undo/redo,
    legal move introspection, and FEN/PGN import/export

  ## Endpoints
  - Game: POST /api/board/game, GET /{gameId}, GET /{gameId}/stream, POST /{gameId}/resign
  - Move: POST /{gameId}/move/{uci}, GET /{gameId}/moves, POST /{gameId}/undo, POST /{gameId}/redo
  - Draw: POST /{gameId}/draw/{action}
  - Import: POST /import/fen, POST /import/pgn
  - Export: GET /{gameId}/export/fen, GET /{gameId}/export/pgn

  ## Test plan
  - [ ] Open docs/api-spec.yaml in Swagger Editor (https://editor.swagger.io) — zero validation errors expected
  - [ ] Verify every endpoint maps to an existing GameEngine or RuleSet method

Co-authored-by: LQ63 <lkhermann@web.de>
Reviewed-on: #25
Reviewed-by: Janis <janis-e@gmx.de>
Co-authored-by: Leon Hermann <lq@blackhole.local>
Co-committed-by: Leon Hermann <lq@blackhole.local>
2026-04-12 17:15:11 +02:00
TeamCity e158b0a7f0 ci: bump version with Build-36 2026-04-12 14:45:56 +00:00
Janis f1c9df16b6 feat: add initial project structure and documentation files (#24)
Build & Test (NowChessSystems) TeamCity build finished
Reviewed-on: #24
2026-04-12 16:39:17 +02:00
TeamCity 9d11d25b99 ci: bump version with Build-35 2026-04-08 07:37:40 +00:00
lq64 7a045d31d7 feat: NCS-31 FastParse FEN (#22)
Build & Test (NowChessSystems) TeamCity build finished
Summary

  - Added fastparse_3:3.0.2 dependency to modules/io
  - Implemented FenParserFastParse as a second alternative FEN parser using FastParse, with the same public API as
  FenParser and FenParserCombinators
  - Parsers are built bottom-up using (using P[Any]) Scala 3 syntax with NoWhitespace.* to prevent implicit whitespace
  skipping; rank sum validation uses Pass/Fail inside .flatMap
  - Added FenParserFastParseTest mirroring FenParserCombinatorsTest to prove behavioural equivalence across all three
  implementations

  Test plan

  - All existing tests pass — FenParser, FenParserCombinators, and all other modules untouched
  - FenParserFastParseTest covers all cases: valid FEN, invalid color, invalid castling, invalid board shapes, en
  passant, rank overflow, round-trip via FenExporter
  - All parser logic branches genuinely covered — known scoverage gap documented in docs/unresolved.md (FastParse inline
   macro generates synthetic proxy methods that scoverage instruments but that never execute at runtime)

Co-authored-by: LQ63 <lkhermann@web.de>
Reviewed-on: #22
Reviewed-by: Janis <janis-e@gmx.de>
Co-authored-by: Leon Hermann <lq@blackhole.local>
Co-committed-by: Leon Hermann <lq@blackhole.local>
2026-04-08 09:32:57 +02:00
TeamCity b518c704fa ci: bump version with Build-34 2026-04-07 19:42:37 +00:00
Janis fe8e3c0539 fix: NCS-32 Queenside Castle doesn't care about pieces in the way (#23)
Build & Test (NowChessSystems) TeamCity build finished
Reviewed-on: #23
Co-authored-by: Janis <janis.e.20@gmx.de>
Co-committed-by: Janis <janis.e.20@gmx.de>
2026-04-07 20:32:48 +02:00
TeamCity 1b16adcc72 ci: bump version with Build-33 2026-04-07 18:02:38 +00:00
lq64 b4bc72f7e4 feat: NCS-30 FEN Parser using ParserCombinators (#21)
Build & Test (NowChessSystems) TeamCity build finished
Summary

  - Added scala-parser-combinators_3:2.4.0 dependency to modules/io
  - Implemented FenParserCombinators as an alternative FEN parser using RegexParsers, with the same public API as the
  existing FenParser
  - Parsers are built bottom-up: piece characters → rank tokens → rank → board, composed with explicit field separators
  into a full FEN parser
  - Added FenParserCombinatorsTest mirroring the existing FenParserTest to prove behavioural equivalence

  Test plan

  - All existing tests pass — FenParser and all other modules untouched
  - FenParserCombinatorsTest covers all cases: valid FEN, invalid color, invalid castling, invalid board shapes, en
  passant, round-trip via FenExporter
  - 100% line/branch/method coverage on FenParserCombinators

Co-authored-by: LQ63 <lkhermann@web.de>
Reviewed-on: #21
Reviewed-by: Janis <janis-e@gmx.de>
Co-authored-by: Leon Hermann <lq@blackhole.local>
Co-committed-by: Leon Hermann <lq@blackhole.local>
2026-04-07 12:28:43 +02:00
Janis 8959c3a849 refactor: NCS-24 update CLAUDE.md for improved structure and clarity (#20)
Build & Test (NowChessSystems) TeamCity build finished
Reviewed-on: #20
Reviewed-by: Leon Hermann <lq@blackhole.local>
Co-authored-by: Janis <janis-e@gmx.de>
Co-committed-by: Janis <janis-e@gmx.de>
2026-04-07 12:25:33 +02:00
TeamCity 47032378e2 ci: bump version with Build-31 2026-04-07 06:25:56 +00:00
lq64 217f14f899 refactor: NCS-19 Currying (#18)
Build & Test (NowChessSystems) TeamCity build finished
Summary

  - Curried candidateMoves, legalMoves, and applyMove in the RuleSet trait to separate (context) as the world being
  operated on from the computation parameter
  - Updated DefaultRules overrides and all internal call sites
  - Updated all external call sites: GameEngine, PgnParser, PgnExporter, ChessBoardView, and all affected tests

  Test plan

  - All existing tests pass (./gradlew build)
  - No behaviour changes — pure style refactoring, existing test suite is the regression guard

Co-authored-by: LQ63 <lkhermann@web.de>
Reviewed-on: #18
Reviewed-by: Janis <janis-e@gmx.de>
Co-authored-by: Leon Hermann <lq@blackhole.local>
Co-committed-by: Leon Hermann <lq@blackhole.local>
2026-04-06 21:03:17 +02:00
TeamCity 638139602c ci: bump version with Build-30 2026-04-06 07:21:42 +00:00
Janis 8f56a82104 refactor: NCS-22 NCS-23 reworked modules and tests (#17)
Build & Test (NowChessSystems) TeamCity build finished
Reviewed-on: #17
2026-04-06 09:07:39 +02:00
TeamCity 51ffd7aac9 ci: bump version with Build-28 2026-04-03 09:09:16 +00:00
272 changed files with 18837 additions and 6195 deletions
-9
View File
@@ -1,9 +0,0 @@
# Memory Index
## Feedback
- [feedback_keep_structure_updated.md](feedback_keep_structure_updated.md) — Update structure memory files whenever source files are added, removed, or changed
## Project Structure
- [project_structure_root.md](project_structure_root.md) — Top-level layout, modules list, VERSIONS map, navigation rules (skip `build/`, `.gradle/`, `.idea/`)
- [project_structure_api.md](project_structure_api.md) — `modules/api`: all files and types (Board, Piece, Square, GameState, Move, ApiResponse, PlayerInfo)
- [project_structure_core.md](project_structure_core.md) — `modules/core`: all files and types (GameContext, GameRules, MoveValidator, GameController, Parser, Renderer)
@@ -1,16 +0,0 @@
---
name: keep-structure-memory-updated
description: Always update the project structure memory files when adding, removing, or changing source files
type: feedback
---
After any change that adds, removes, renames, or significantly alters a source file, update the relevant structure memory file:
- New/renamed/deleted file in `modules/api` → update `project_structure_api.md`
- New/renamed/deleted file in `modules/core` → update `project_structure_core.md`
- New module, dependency version change, or new top-level directory → update `project_structure_root.md`
- New module added → create a new `project_structure_<module>.md` and add it to `MEMORY.md`
**Why:** Structure memories are the primary navigation aid. Stale entries cause wasted exploration.
**How to apply:** Treat the structure memory update as part of completing any implementation task — do it in the same session, not as a follow-up.
-51
View File
@@ -1,51 +0,0 @@
---
name: module-api-structure
description: File and type overview for the modules/api module (shared domain types)
type: project
---
# Module: `modules/api`
**Purpose:** Shared domain model — pure data types with no game logic. Depended on by `modules/core`.
**Gradle:** `id("scala")`, no `application` plugin. No Quarkus. Uses scoverage plugin.
**Package root:** `de.nowchess.api`
## Source files (`src/main/scala/de/nowchess/api/`)
### `board/`
| File | Contents |
|------|----------|
| `Board.scala` | `opaque type Board = Map[Square, Piece]` — extensions: `pieceAt`, `withMove`, `pieces`; `Board.initial` sets up start position |
| `Color.scala` | `enum Color { White, Black }``.opposite`, `.label` |
| `Piece.scala` | `case class Piece(color, pieceType)` — convenience vals `WhitePawn``BlackKing` |
| `PieceType.scala` | `enum PieceType { Pawn, Knight, Bishop, Rook, Queen, King }``.label` |
| `Square.scala` | `enum File { AH }`, `enum Rank { R1R8 }`, `case class Square(file, rank)``.toString` algebraic, `Square.fromAlgebraic(s)` |
### `game/`
| File | Contents |
|------|----------|
| `GameState.scala` | `case class CastlingRights(kingSide, queenSide)` + `.None`/`.Both`; `enum GameResult { WhiteWins, BlackWins, Draw }`; `enum GameStatus { NotStarted, InProgress, Finished(result) }`; `case class GameState(piecePlacement, activeColor, castlingWhite, castlingBlack, enPassantTarget, halfMoveClock, fullMoveNumber, status)` — FEN-compatible snapshot |
### `move/`
| File | Contents |
|------|----------|
| `Move.scala` | `enum PromotionPiece { Knight, Bishop, Rook, Queen }`; `enum MoveType { Normal, CastleKingside, CastleQueenside, EnPassant, Promotion(piece) }`; `case class Move(from, to, moveType = Normal)` |
### `player/`
| File | Contents |
|------|----------|
| `PlayerInfo.scala` | `opaque type PlayerId = String`; `case class PlayerInfo(id: PlayerId, displayName: String)` |
### `response/`
| File | Contents |
|------|----------|
| `ApiResponse.scala` | `sealed trait ApiResponse[+A]``Success[A](data)` / `Failure(errors)`; `case class ApiError(code, message, field?)`; `case class Pagination(page, pageSize, totalItems)` + `.totalPages`; `case class PagedResponse[A](items, pagination)` |
## Test files (`src/test/scala/de/nowchess/api/`)
Mirror of main structure — one `*Test.scala` per source file using `AnyFunSuite with Matchers`.
## Notes
- `GameState` is FEN-style but `Board` (in `core`) is a `Map[Square,Piece]` — the two are separate representations
- `CastlingRights` is defined here in `api`; the castling logic lives in `core`
-48
View File
@@ -1,48 +0,0 @@
---
name: module-core-structure
description: File and type overview for the modules/core module (TUI chess engine)
type: project
---
# Module: `modules/core`
**Purpose:** Standalone TUI chess application. All game logic, move validation, rendering. Depends on `modules/api`.
**Gradle:** `id("scala")` + `application` plugin. Main class: `de.nowchess.chess.Main`. Uses scoverage plugin.
**Package root:** `de.nowchess.chess`
## Source files (`src/main/scala/de/nowchess/chess/`)
### Root
| File | Contents |
|------|----------|
| `Main.scala` | Entry point — prints welcome, starts `GameController.gameLoop(GameContext.initial, Color.White)` |
### `controller/`
| File | Contents |
|------|----------|
| `GameController.scala` | `sealed trait MoveResult` ADT: `Quit`, `InvalidFormat`, `NoPiece`, `WrongColor`, `IllegalMove`, `Moved`, `MovedInCheck`, `Checkmate`, `Stalemate`; `object GameController``processMove(ctx, turn, raw): MoveResult` (pure), `gameLoop(ctx, turn)` (I/O loop), `applyRightsRevocation(...)` (castling rights bookkeeping) |
| `Parser.scala` | `object Parser``parseMove(input): Option[(Square, Square)]` parses coordinate notation e.g. `"e2e4"` |
### `logic/`
| File | Contents |
|------|----------|
| `GameContext.scala` | `enum CastleSide { Kingside, Queenside }`; `case class GameContext(board, whiteCastling, blackCastling)``.castlingFor(color)`, `.withUpdatedRights(color, rights)`; `GameContext.initial`; `extension (Board).withCastle(color, side)` moves king+rook atomically |
| `GameRules.scala` | `enum PositionStatus { Normal, InCheck, Mated, Drawn }`; `object GameRules``isInCheck(board, color)`, `legalMoves(ctx, color): Set[(Square,Square)]`, `gameStatus(ctx, color): PositionStatus` |
| `MoveValidator.scala` | `object MoveValidator``isLegal(board, from, to)`, `legalTargets(board, from): Set[Square]` (board-only, no castling), `legalTargets(ctx, from)` (context-aware, includes castling), `isCastle`, `castleSide`, `castlingTargets(ctx, color)` — full castling legality (empty squares, no check through transit) |
### `view/`
| File | Contents |
|------|----------|
| `Renderer.scala` | `object Renderer``render(board): String` outputs ANSI-colored board with file/rank labels |
| `PieceUnicode.scala` | `extension (Piece).unicode: String` maps each piece to its Unicode chess symbol |
## Test files (`src/test/scala/de/nowchess/chess/`)
Mirror of main structure — one `*Test.scala` per source file using `AnyFunSuite with Matchers`.
## Key design notes
- `MoveValidator` has two overloaded `legalTargets`: one takes `Board` (geometry only), one takes `GameContext` (adds castling)
- `GameRules.legalMoves` filters by check — it calls `MoveValidator.legalTargets(ctx, from)` then simulates each move
- Castling rights revocation is in `GameController.applyRightsRevocation`, triggered after every move
- No `@QuarkusTest` — this module is a plain Scala application, not a Quarkus service
-55
View File
@@ -1,55 +0,0 @@
---
name: project-root-structure
description: Top-level project structure, modules list, and navigation notes for NowChessSystems
type: project
---
# NowChessSystems — Root Structure
## Directory layout (skip `build/`, `.gradle/`, `.idea/`)
```
NowChessSystems/
├── build.gradle.kts # Root: sonarqube plugin, VERSIONS map
├── settings.gradle.kts # include(":modules:core", ":modules:api")
├── gradlew / gradlew.bat
├── CLAUDE.md # Project instructions for Claude Code
├── .claude/
│ ├── CLAUDE.MD # Working agreement (plan/verify/unresolved)
│ ├── settings.json
│ └── agents/ # architect, code-reviewer, gradle-builder, scala-implementer, test-writer
├── docs/
│ ├── Claude-Skills.md
│ ├── Security.md
│ └── unresolved.md
├── jacoco-reporter/ # Python scripts for coverage gap reporting
└── modules/
├── api/ # Shared domain types (no logic)
└── core/ # TUI chess engine + game logic
```
## Modules
| Module | Gradle path | Purpose |
|--------|-------------|---------|
| `api` | `:modules:api` | Shared domain model: Board, Piece, Move, GameState, ApiResponse |
| `core` | `:modules:core` | TUI chess app: game logic, move validation, rendering |
`core` depends on `api` via `implementation(project(":modules:api"))`.
## VERSIONS (root `build.gradle.kts`)
| Key | Value |
|-----|-------|
| `QUARKUS_SCALA3` | 1.0.0 |
| `SCALA3` | 3.5.1 |
| `SCALA_LIBRARY` | 2.13.18 |
| `SCALATEST` | 3.2.19 |
| `SCALATEST_JUNIT` | 0.1.11 |
| `SCOVERAGE` | 2.1.1 |
## Navigation rules
- **Always skip** `build/`, `.gradle/`, `.idea/` when exploring — they are generated artifacts
- Tests use `AnyFunSuite with Matchers` (ScalaTest), not JUnit `@Test`
- No Quarkus in current modules — Quarkus is planned for future services
- Agent workflow: architect → scala-implementer → test-writer → gradle-builder → code-reviewer
+2 -2
View File
@@ -1,6 +1,6 @@
{
"enabledPlugins": {
"superpowers@claude-plugins-official": true,
"ui-ux-pro-max@ui-ux-pro-max-skill": true
"superpowers@claude-plugins-official": false,
"ui-ux-pro-max@ui-ux-pro-max-skill": false
}
}
+203
View File
@@ -0,0 +1,203 @@
# NowChessSystems — AI Context Map
> **Stack:** raw-http | none | unknown | scala
> 0 routes | 0 models | 0 components | 35 lib files | 0 env vars | 0 middleware
> **Token savings:** this file is ~3.700 tokens. Without it, AI exploration would cost ~18.200 tokens. **Saves ~14.500 tokens per conversation.**
---
# Libraries
- `jacoco-reporter/scoverage_coverage_gaps.py`
- function parse_scoverage_xml: (xml_path) -> tuple[dict, list[ClassGap]]
- function format_agent: (project_stats, classes) -> str
- function format_json: (project_stats, classes) -> str
- function format_markdown: (project_stats, classes) -> str
- function format_module_gaps: (module_name, classes, stmt_pct) -> str
- function run_scan_modules: (modules_dir, package_filter, min_coverage) -> None
- _...4 more_
- `jacoco-reporter/test_gaps.py`
- function parse_suite_xml: (xml_path) -> SuiteResult
- function load_module: (module_dir, results_subdir) -> Optional[ModuleResult]
- function format_module: (mod) -> str
- function run: (modules_dir, results_subdir, module_filter) -> None
- function main: () -> None
- class TestCase
- _...2 more_
- `modules/api/src/main/scala/de/nowchess/api/board/Board.scala`
- class Board
- function apply
- function pieceAt
- function updated
- function removed
- function withMove
- _...2 more_
- `modules/api/src/main/scala/de/nowchess/api/board/CastlingRights.scala`
- function hasAnyRights
- function hasRights
- function revokeColor
- function revokeKingSide
- function revokeQueenSide
- class CastlingRights
- `modules/api/src/main/scala/de/nowchess/api/board/Color.scala` — function opposite, function label
- `modules/api/src/main/scala/de/nowchess/api/board/Piece.scala` — class Piece
- `modules/api/src/main/scala/de/nowchess/api/board/PieceType.scala` — function label
- `modules/api/src/main/scala/de/nowchess/api/board/Square.scala`
- class Square
- function fromAlgebraic
- function offset
- `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`
- function withBoard
- function withTurn
- function withCastlingRights
- function withEnPassantSquare
- function withHalfMoveClock
- function withMove
- _...2 more_
- `modules/api/src/main/scala/de/nowchess/api/player/PlayerInfo.scala` — class PlayerId, function apply
- `modules/api/src/main/scala/de/nowchess/api/response/ApiResponse.scala`
- class ApiResponse
- function error
- function totalPages
- `modules/core/src/main/scala/de/nowchess/chess/command/Command.scala`
- class Command
- function execute
- function undo
- function description
- class MoveResult
- `modules/core/src/main/scala/de/nowchess/chess/command/CommandInvoker.scala`
- class CommandInvoker
- function execute
- function undo
- function redo
- function history
- function getCurrentIndex
- _...3 more_
- `modules/core/src/main/scala/de/nowchess/chess/controller/Parser.scala` — class Parser, function parseMove
- `modules/core/src/main/scala/de/nowchess/chess/engine/GameEngine.scala`
- class GameEngine
- function isPendingPromotion
- function board
- function turn
- function context
- function canUndo
- _...10 more_
- `modules/core/src/main/scala/de/nowchess/chess/observer/Observer.scala`
- function context
- class Observer
- function onGameEvent
- class Observable
- function subscribe
- function unsubscribe
- _...1 more_
- `modules/io/src/main/scala/de/nowchess/io/GameContextExport.scala` — class GameContextExport, function exportGameContext
- `modules/io/src/main/scala/de/nowchess/io/GameContextImport.scala` — class GameContextImport, function importGameContext
- `modules/io/src/main/scala/de/nowchess/io/fen/FenExporter.scala`
- class FenExporter
- function boardToFen
- function gameContextToFen
- function exportGameContext
- `modules/io/src/main/scala/de/nowchess/io/fen/FenParser.scala`
- class FenParser
- function parseFen
- function importGameContext
- function parseBoard
- `modules/io/src/main/scala/de/nowchess/io/fen/FenParserCombinators.scala`
- class FenParserCombinators
- function parseFen
- function parseBoard
- function importGameContext
- `modules/io/src/main/scala/de/nowchess/io/fen/FenParserFastParse.scala`
- class FenParserFastParse
- function parseFen
- function parseBoard
- function importGameContext
- `modules/io/src/main/scala/de/nowchess/io/fen/FenParserSupport.scala` — function buildSquares
- `modules/io/src/main/scala/de/nowchess/io/pgn/PgnExporter.scala`
- class PgnExporter
- function exportGameContext
- function exportGame
- `modules/io/src/main/scala/de/nowchess/io/pgn/PgnParser.scala`
- class PgnParser
- function validatePgn
- function importGameContext
- function parsePgn
- function parseAlgebraicMove
- `modules/rule/src/main/scala/de/nowchess/rules/RuleSet.scala`
- class RuleSet
- function candidateMoves
- function legalMoves
- function allLegalMoves
- function isCheck
- function isCheckmate
- _...4 more_
- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala`
- class DefaultRules
- function loop
- function toMoves
- function loop
- `modules/ui/src/main/scala/de/nowchess/ui/Main.scala` — class Main, function main
- `modules/ui/src/main/scala/de/nowchess/ui/gui/ChessBoardView.scala`
- class ChessBoardView
- function updateBoard
- function updateUndoRedoButtons
- function showMessage
- function showPromotionDialog
- `modules/ui/src/main/scala/de/nowchess/ui/gui/ChessGUI.scala`
- class ChessGUIApp
- class ChessGUILauncher
- function getEngine
- function launch
- `modules/ui/src/main/scala/de/nowchess/ui/gui/GUIObserver.scala` — class GUIObserver
- `modules/ui/src/main/scala/de/nowchess/ui/gui/PieceSprites.scala`
- class PieceSprites
- function loadPieceImage
- class SquareColors
- `modules/ui/src/main/scala/de/nowchess/ui/terminal/TerminalUI.scala` — class TerminalUI, function start
- `modules/ui/src/main/scala/de/nowchess/ui/utils/PieceUnicode.scala` — function unicode
- `modules/ui/src/main/scala/de/nowchess/ui/utils/Renderer.scala` — class Renderer, function render
---
# Dependency Graph
## Most Imported Files (change these carefully)
- `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala` — imported by **28** files
- `modules/api/src/main/scala/de/nowchess/api/board/Square.scala` — imported by **21** files
- `modules/api/src/main/scala/de/nowchess/api/board/Color.scala` — imported by **19** files
- `modules/api/src/main/scala/de/nowchess/api/move/Move.scala` — imported by **14** files
- `modules/api/src/main/scala/de/nowchess/api/board/Board.scala` — imported by **13** files
- `modules/api/src/main/scala/de/nowchess/api/board/Piece.scala` — imported by **10** files
- `modules/api/src/main/scala/de/nowchess/api/board/PieceType.scala` — imported by **9** files
- `modules/io/src/main/scala/de/nowchess/io/fen/FenParser.scala` — imported by **9** files
- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` — imported by **8** files
- `modules/io/src/main/scala/de/nowchess/io/GameContextImport.scala` — imported by **7** files
- `modules/api/src/main/scala/de/nowchess/api/board/CastlingRights.scala` — imported by **4** files
- `modules/io/src/main/scala/de/nowchess/io/GameContextExport.scala` — imported by **4** files
- `modules/rule/src/main/scala/de/nowchess/rules/RuleSet.scala` — imported by **4** files
- `modules/core/src/main/scala/de/nowchess/chess/observer/Observer.scala` — imported by **4** files
- `modules/core/src/main/scala/de/nowchess/chess/engine/GameEngine.scala` — imported by **4** files
- `modules/io/src/main/scala/de/nowchess/io/pgn/PgnParser.scala` — imported by **2** files
- `modules/io/src/main/scala/de/nowchess/io/pgn/PgnExporter.scala` — imported by **2** files
- `modules/io/src/main/scala/de/nowchess/io/fen/FenExporter.scala` — imported by **2** files
- `modules/io/src/main/scala/de/nowchess/io/fen/FenParserSupport.scala` — imported by **2** files
- `modules/core/src/main/scala/de/nowchess/chess/controller/Parser.scala` — imported by **1** files
## Import Map (who imports what)
- `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala``modules/core/src/main/scala/de/nowchess/chess/command/Command.scala`, `modules/core/src/main/scala/de/nowchess/chess/engine/GameEngine.scala`, `modules/core/src/main/scala/de/nowchess/chess/observer/Observer.scala`, `modules/core/src/test/scala/de/nowchess/chess/command/CommandInvokerBranchTest.scala`, `modules/core/src/test/scala/de/nowchess/chess/command/CommandInvokerTest.scala` +23 more
- `modules/api/src/main/scala/de/nowchess/api/board/Square.scala``modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/api/src/main/scala/de/nowchess/api/move/Move.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/api/src/test/scala/de/nowchess/api/move/MoveTest.scala`, `modules/core/src/main/scala/de/nowchess/chess/command/Command.scala` +16 more
- `modules/api/src/main/scala/de/nowchess/api/board/Color.scala``modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/core/src/main/scala/de/nowchess/chess/engine/GameEngine.scala`, `modules/core/src/main/scala/de/nowchess/chess/observer/Observer.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/EngineTestHelpers.scala` +14 more
- `modules/api/src/main/scala/de/nowchess/api/move/Move.scala``modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/api/src/test/scala/de/nowchess/api/board/BoardTest.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/core/src/main/scala/de/nowchess/chess/engine/GameEngine.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineIntegrationTest.scala` +9 more
- `modules/api/src/main/scala/de/nowchess/api/board/Board.scala``modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/core/src/main/scala/de/nowchess/chess/engine/GameEngine.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/EngineTestHelpers.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineGameEndingTest.scala` +8 more
- `modules/api/src/main/scala/de/nowchess/api/board/Piece.scala``modules/core/src/main/scala/de/nowchess/chess/command/Command.scala`, `modules/core/src/main/scala/de/nowchess/chess/engine/GameEngine.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEnginePromotionTest.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineScenarioTest.scala`, `modules/rule/src/test/scala/de/nowchess/rule/DefaultRulesStateTransitionsTest.scala` +5 more
- `modules/api/src/main/scala/de/nowchess/api/board/PieceType.scala``modules/core/src/main/scala/de/nowchess/chess/engine/GameEngine.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineIntegrationTest.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEnginePromotionTest.scala`, `modules/rule/src/test/scala/de/nowchess/rule/DefaultRulesStateTransitionsTest.scala`, `modules/rule/src/test/scala/de/nowchess/rule/DefaultRulesTest.scala` +4 more
- `modules/io/src/main/scala/de/nowchess/io/fen/FenParser.scala``modules/core/src/test/scala/de/nowchess/chess/engine/EngineTestHelpers.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineLoadGameTest.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineNotationTest.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEnginePromotionTest.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineScenarioTest.scala` +4 more
- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala``modules/core/src/main/scala/de/nowchess/chess/engine/GameEngine.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/EngineTestHelpers.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineIntegrationTest.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEnginePromotionTest.scala`, `modules/io/src/main/scala/de/nowchess/io/pgn/PgnExporter.scala` +3 more
- `modules/io/src/main/scala/de/nowchess/io/GameContextImport.scala``modules/core/src/main/scala/de/nowchess/chess/engine/GameEngine.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineIntegrationTest.scala`, `modules/io/src/main/scala/de/nowchess/io/fen/FenParser.scala`, `modules/io/src/main/scala/de/nowchess/io/fen/FenParserCombinators.scala`, `modules/io/src/main/scala/de/nowchess/io/fen/FenParserFastParse.scala` +2 more
---
_Generated by [codesight](https://github.com/Houseofmvps/codesight) — see your codebase clearly_
+37
View File
@@ -0,0 +1,37 @@
# Dependency Graph
## Most Imported Files (change these carefully)
- `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala` — imported by **28** files
- `modules/api/src/main/scala/de/nowchess/api/board/Square.scala` — imported by **21** files
- `modules/api/src/main/scala/de/nowchess/api/board/Color.scala` — imported by **19** files
- `modules/api/src/main/scala/de/nowchess/api/move/Move.scala` — imported by **14** files
- `modules/api/src/main/scala/de/nowchess/api/board/Board.scala` — imported by **13** files
- `modules/api/src/main/scala/de/nowchess/api/board/Piece.scala` — imported by **10** files
- `modules/api/src/main/scala/de/nowchess/api/board/PieceType.scala` — imported by **9** files
- `modules/io/src/main/scala/de/nowchess/io/fen/FenParser.scala` — imported by **9** files
- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` — imported by **8** files
- `modules/io/src/main/scala/de/nowchess/io/GameContextImport.scala` — imported by **7** files
- `modules/api/src/main/scala/de/nowchess/api/board/CastlingRights.scala` — imported by **4** files
- `modules/io/src/main/scala/de/nowchess/io/GameContextExport.scala` — imported by **4** files
- `modules/rule/src/main/scala/de/nowchess/rules/RuleSet.scala` — imported by **4** files
- `modules/core/src/main/scala/de/nowchess/chess/observer/Observer.scala` — imported by **4** files
- `modules/core/src/main/scala/de/nowchess/chess/engine/GameEngine.scala` — imported by **4** files
- `modules/io/src/main/scala/de/nowchess/io/pgn/PgnParser.scala` — imported by **2** files
- `modules/io/src/main/scala/de/nowchess/io/pgn/PgnExporter.scala` — imported by **2** files
- `modules/io/src/main/scala/de/nowchess/io/fen/FenExporter.scala` — imported by **2** files
- `modules/io/src/main/scala/de/nowchess/io/fen/FenParserSupport.scala` — imported by **2** files
- `modules/core/src/main/scala/de/nowchess/chess/controller/Parser.scala` — imported by **1** files
## Import Map (who imports what)
- `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala``modules/core/src/main/scala/de/nowchess/chess/command/Command.scala`, `modules/core/src/main/scala/de/nowchess/chess/engine/GameEngine.scala`, `modules/core/src/main/scala/de/nowchess/chess/observer/Observer.scala`, `modules/core/src/test/scala/de/nowchess/chess/command/CommandInvokerBranchTest.scala`, `modules/core/src/test/scala/de/nowchess/chess/command/CommandInvokerTest.scala` +23 more
- `modules/api/src/main/scala/de/nowchess/api/board/Square.scala``modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/api/src/main/scala/de/nowchess/api/move/Move.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/api/src/test/scala/de/nowchess/api/move/MoveTest.scala`, `modules/core/src/main/scala/de/nowchess/chess/command/Command.scala` +16 more
- `modules/api/src/main/scala/de/nowchess/api/board/Color.scala``modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/core/src/main/scala/de/nowchess/chess/engine/GameEngine.scala`, `modules/core/src/main/scala/de/nowchess/chess/observer/Observer.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/EngineTestHelpers.scala` +14 more
- `modules/api/src/main/scala/de/nowchess/api/move/Move.scala``modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/api/src/test/scala/de/nowchess/api/board/BoardTest.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/core/src/main/scala/de/nowchess/chess/engine/GameEngine.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineIntegrationTest.scala` +9 more
- `modules/api/src/main/scala/de/nowchess/api/board/Board.scala``modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/core/src/main/scala/de/nowchess/chess/engine/GameEngine.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/EngineTestHelpers.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineGameEndingTest.scala` +8 more
- `modules/api/src/main/scala/de/nowchess/api/board/Piece.scala``modules/core/src/main/scala/de/nowchess/chess/command/Command.scala`, `modules/core/src/main/scala/de/nowchess/chess/engine/GameEngine.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEnginePromotionTest.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineScenarioTest.scala`, `modules/rule/src/test/scala/de/nowchess/rule/DefaultRulesStateTransitionsTest.scala` +5 more
- `modules/api/src/main/scala/de/nowchess/api/board/PieceType.scala``modules/core/src/main/scala/de/nowchess/chess/engine/GameEngine.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineIntegrationTest.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEnginePromotionTest.scala`, `modules/rule/src/test/scala/de/nowchess/rule/DefaultRulesStateTransitionsTest.scala`, `modules/rule/src/test/scala/de/nowchess/rule/DefaultRulesTest.scala` +4 more
- `modules/io/src/main/scala/de/nowchess/io/fen/FenParser.scala``modules/core/src/test/scala/de/nowchess/chess/engine/EngineTestHelpers.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineLoadGameTest.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineNotationTest.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEnginePromotionTest.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineScenarioTest.scala` +4 more
- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala``modules/core/src/main/scala/de/nowchess/chess/engine/GameEngine.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/EngineTestHelpers.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineIntegrationTest.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEnginePromotionTest.scala`, `modules/io/src/main/scala/de/nowchess/io/pgn/PgnExporter.scala` +3 more
- `modules/io/src/main/scala/de/nowchess/io/GameContextImport.scala``modules/core/src/main/scala/de/nowchess/chess/engine/GameEngine.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineIntegrationTest.scala`, `modules/io/src/main/scala/de/nowchess/io/fen/FenParser.scala`, `modules/io/src/main/scala/de/nowchess/io/fen/FenParserCombinators.scala`, `modules/io/src/main/scala/de/nowchess/io/fen/FenParserFastParse.scala` +2 more
+150
View File
@@ -0,0 +1,150 @@
# Libraries
- `jacoco-reporter/scoverage_coverage_gaps.py`
- function parse_scoverage_xml: (xml_path) -> tuple[dict, list[ClassGap]]
- function format_agent: (project_stats, classes) -> str
- function format_json: (project_stats, classes) -> str
- function format_markdown: (project_stats, classes) -> str
- function format_module_gaps: (module_name, classes, stmt_pct) -> str
- function run_scan_modules: (modules_dir, package_filter, min_coverage) -> None
- _...4 more_
- `jacoco-reporter/test_gaps.py`
- function parse_suite_xml: (xml_path) -> SuiteResult
- function load_module: (module_dir, results_subdir) -> Optional[ModuleResult]
- function format_module: (mod) -> str
- function run: (modules_dir, results_subdir, module_filter) -> None
- function main: () -> None
- class TestCase
- _...2 more_
- `modules/api/src/main/scala/de/nowchess/api/board/Board.scala`
- class Board
- function apply
- function pieceAt
- function updated
- function removed
- function withMove
- _...2 more_
- `modules/api/src/main/scala/de/nowchess/api/board/CastlingRights.scala`
- function hasAnyRights
- function hasRights
- function revokeColor
- function revokeKingSide
- function revokeQueenSide
- class CastlingRights
- `modules/api/src/main/scala/de/nowchess/api/board/Color.scala` — function opposite, function label
- `modules/api/src/main/scala/de/nowchess/api/board/Piece.scala` — class Piece
- `modules/api/src/main/scala/de/nowchess/api/board/PieceType.scala` — function label
- `modules/api/src/main/scala/de/nowchess/api/board/Square.scala`
- class Square
- function fromAlgebraic
- function offset
- `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`
- function withBoard
- function withTurn
- function withCastlingRights
- function withEnPassantSquare
- function withHalfMoveClock
- function withMove
- _...2 more_
- `modules/api/src/main/scala/de/nowchess/api/player/PlayerInfo.scala` — class PlayerId, function apply
- `modules/api/src/main/scala/de/nowchess/api/response/ApiResponse.scala`
- class ApiResponse
- function error
- function totalPages
- `modules/core/src/main/scala/de/nowchess/chess/command/Command.scala`
- class Command
- function execute
- function undo
- function description
- class MoveResult
- `modules/core/src/main/scala/de/nowchess/chess/command/CommandInvoker.scala`
- class CommandInvoker
- function execute
- function undo
- function redo
- function history
- function getCurrentIndex
- _...3 more_
- `modules/core/src/main/scala/de/nowchess/chess/controller/Parser.scala` — class Parser, function parseMove
- `modules/core/src/main/scala/de/nowchess/chess/engine/GameEngine.scala`
- class GameEngine
- function isPendingPromotion
- function board
- function turn
- function context
- function canUndo
- _...10 more_
- `modules/core/src/main/scala/de/nowchess/chess/observer/Observer.scala`
- function context
- class Observer
- function onGameEvent
- class Observable
- function subscribe
- function unsubscribe
- _...1 more_
- `modules/io/src/main/scala/de/nowchess/io/GameContextExport.scala` — class GameContextExport, function exportGameContext
- `modules/io/src/main/scala/de/nowchess/io/GameContextImport.scala` — class GameContextImport, function importGameContext
- `modules/io/src/main/scala/de/nowchess/io/fen/FenExporter.scala`
- class FenExporter
- function boardToFen
- function gameContextToFen
- function exportGameContext
- `modules/io/src/main/scala/de/nowchess/io/fen/FenParser.scala`
- class FenParser
- function parseFen
- function importGameContext
- function parseBoard
- `modules/io/src/main/scala/de/nowchess/io/fen/FenParserCombinators.scala`
- class FenParserCombinators
- function parseFen
- function parseBoard
- function importGameContext
- `modules/io/src/main/scala/de/nowchess/io/fen/FenParserFastParse.scala`
- class FenParserFastParse
- function parseFen
- function parseBoard
- function importGameContext
- `modules/io/src/main/scala/de/nowchess/io/fen/FenParserSupport.scala` — function buildSquares
- `modules/io/src/main/scala/de/nowchess/io/pgn/PgnExporter.scala`
- class PgnExporter
- function exportGameContext
- function exportGame
- `modules/io/src/main/scala/de/nowchess/io/pgn/PgnParser.scala`
- class PgnParser
- function validatePgn
- function importGameContext
- function parsePgn
- function parseAlgebraicMove
- `modules/rule/src/main/scala/de/nowchess/rules/RuleSet.scala`
- class RuleSet
- function candidateMoves
- function legalMoves
- function allLegalMoves
- function isCheck
- function isCheckmate
- _...4 more_
- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala`
- class DefaultRules
- function loop
- function toMoves
- function loop
- `modules/ui/src/main/scala/de/nowchess/ui/Main.scala` — class Main, function main
- `modules/ui/src/main/scala/de/nowchess/ui/gui/ChessBoardView.scala`
- class ChessBoardView
- function updateBoard
- function updateUndoRedoButtons
- function showMessage
- function showPromotionDialog
- `modules/ui/src/main/scala/de/nowchess/ui/gui/ChessGUI.scala`
- class ChessGUIApp
- class ChessGUILauncher
- function getEngine
- function launch
- `modules/ui/src/main/scala/de/nowchess/ui/gui/GUIObserver.scala` — class GUIObserver
- `modules/ui/src/main/scala/de/nowchess/ui/gui/PieceSprites.scala`
- class PieceSprites
- function loadPieceImage
- class SquareColors
- `modules/ui/src/main/scala/de/nowchess/ui/terminal/TerminalUI.scala` — class TerminalUI, function start
- `modules/ui/src/main/scala/de/nowchess/ui/utils/PieceUnicode.scala` — function unicode
- `modules/ui/src/main/scala/de/nowchess/ui/utils/Renderer.scala` — class Renderer, function render
+44
View File
@@ -0,0 +1,44 @@
# NowChessSystems — Wiki
_Generated 2026-04-12 — re-run `npx codesight --wiki` if the codebase has changed._
Structural map compiled from source code via AST. No LLM — deterministic, 200ms.
> **How to use safely:** These articles tell you WHERE things live and WHAT exists. They do not show full implementation logic. Always read the actual source files before implementing new features or making changes. Never infer how a function works from the wiki alone.
## Articles
- [Overview](./overview.md)
## Quick Stats
- Routes: **0**
- Models: **0**
- Components: **0**
- Env vars: **0** required, **0** with defaults
## How to Use
- **New session:** read `index.md` (this file) for orientation — WHERE things are
- **Architecture question:** read `overview.md` (~500 tokens)
- **Domain question:** read the relevant article, then **read those source files**
- **Database question:** read `database.md`, then read the actual schema files
- **Before implementing anything:** read the source files listed in the article
- **Full source context:** read `.codesight/CODESIGHT.md`
## What the Wiki Does Not Cover
These exist in your codebase but are **not** reflected in wiki articles:
- Routes registered dynamically at runtime (loops, plugin factories, `app.use(dynamicRouter)`)
- Internal routes from npm packages (e.g. Better Auth's built-in `/api/auth/*` endpoints)
- WebSocket and SSE handlers
- Raw SQL tables not declared through an ORM
- Computed or virtual fields absent from schema declarations
- TypeScript types that are not actual database columns
- Routes marked `[inferred]` were detected via regex and may have lower precision
- gRPC, tRPC, and GraphQL resolvers may be partially captured
When in doubt, search the source. The wiki is a starting point, not a complete inventory.
---
_Last compiled: 2026-04-12 · 2 articles · [codesight](https://github.com/Houseofmvps/codesight)_
+5
View File
@@ -0,0 +1,5 @@
# Wiki Log
History of `npx codesight --wiki` runs. Capped at 20 entries.
## [2026-04-12 14:34:19] scan | 0 routes, 0 models, 0 components → 2 articles
+19
View File
@@ -0,0 +1,19 @@
# NowChessSystems — Overview
> **Navigation aid.** This article shows WHERE things live (routes, models, files). Read actual source files before implementing new features or making changes.
**NowChessSystems** is a scala project built with raw-http.
## High-Impact Files
Changes to these files have the widest blast radius across the codebase:
- `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala` — imported by **28** files
- `modules/api/src/main/scala/de/nowchess/api/board/Square.scala` — imported by **21** files
- `modules/api/src/main/scala/de/nowchess/api/board/Color.scala` — imported by **19** files
- `modules/api/src/main/scala/de/nowchess/api/move/Move.scala` — imported by **14** files
- `modules/api/src/main/scala/de/nowchess/api/board/Board.scala` — imported by **13** files
- `modules/api/src/main/scala/de/nowchess/api/board/Piece.scala` — imported by **10** files
---
_Back to [index.md](./index.md) · Generated 2026-04-12_
+2
View File
@@ -12,6 +12,8 @@
<option value="$PROJECT_DIR$/modules" />
<option value="$PROJECT_DIR$/modules/api" />
<option value="$PROJECT_DIR$/modules/core" />
<option value="$PROJECT_DIR$/modules/io" />
<option value="$PROJECT_DIR$/modules/rule" />
<option value="$PROJECT_DIR$/modules/ui" />
</set>
</option>
+1 -1
View File
@@ -5,7 +5,7 @@
<option name="deprecationWarnings" value="true" />
<option name="uncheckedWarnings" value="true" />
</profile>
<profile name="Gradle 2" modules="NowChessSystems.modules.core.main,NowChessSystems.modules.core.scoverage,NowChessSystems.modules.core.test,NowChessSystems.modules.ui.main,NowChessSystems.modules.ui.scoverage,NowChessSystems.modules.ui.test">
<profile name="Gradle 2" modules="NowChessSystems.modules.core.main,NowChessSystems.modules.core.scoverage,NowChessSystems.modules.core.test,NowChessSystems.modules.io.main,NowChessSystems.modules.io.scoverage,NowChessSystems.modules.io.test,NowChessSystems.modules.rule.main,NowChessSystems.modules.rule.scoverage,NowChessSystems.modules.rule.test,NowChessSystems.modules.ui.main,NowChessSystems.modules.ui.scoverage,NowChessSystems.modules.ui.test">
<option name="deprecationWarnings" value="true" />
<option name="uncheckedWarnings" value="true" />
<parameters>
+21
View File
@@ -0,0 +1,21 @@
# Project Context
This is a scala project using raw-http.
Middleware includes: custom.
High-impact files (most imported, changes here affect many other files):
- modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala (imported by 50 files)
- modules/api/src/main/scala/de/nowchess/api/board/Square.scala (imported by 33 files)
- modules/api/src/main/scala/de/nowchess/api/board/Color.scala (imported by 30 files)
- modules/api/src/main/scala/de/nowchess/api/move/Move.scala (imported by 29 files)
- modules/api/src/main/scala/de/nowchess/api/board/Board.scala (imported by 19 files)
- modules/api/src/main/scala/de/nowchess/api/board/PieceType.scala (imported by 18 files)
- modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala (imported by 17 files)
- modules/api/src/main/scala/de/nowchess/api/board/Piece.scala (imported by 15 files)
Required environment variables (no defaults):
- STOCKFISH_PATH (modules/bot/python/nnue.py)
Read .codesight/wiki/index.md for orientation (WHERE things live). Then read actual source files before implementing. Wiki articles are navigation aids, not implementation guides.
Read .codesight/CODESIGHT.md for the complete AI context map including all routes, schema, components, libraries, config, middleware, and dependency graph.
+84 -52
View File
@@ -1,58 +1,90 @@
# CLAUDE.md — NowChessSystems
# Now-Chess
## Stack
Scala 3.5.x · Quarkus + quarkus-scala3 · Hibernate/Jakarta · Lanterna TUI · K8s + ArgoCD + Kargo · Frontend TBD (Vite/React/Angular/Vue)
### Memory
Your memory is saved under .claude/memory/MEMORY.md.
## Structure
```
build.gradle.kts / settings.gradle.kts # root; include(":modules:<svc>") per service
modules/<svc>/build.gradle.kts + src/
docs/adr/ docs/api/ docs/unresolved.md
```
Versions in root `extra["VERSIONS"]`; modules read via `rootProject.extra["VERSIONS"] as Map<String,String>`.
Scala 3.5.1 · Gradle 9
## Commands
```bash
./gradlew build
./gradlew :modules:<svc>:build|test
./gradlew :modules:<svc>:test --tests "de.nowchess.<svc>.<Class>"
```
## Workflow
1. **Plan** — restate requirement, list files, flag risks. Proceed unless genuine ambiguity.
2. **Tests first** — cover only new behaviour.
3. **Implement** — no scope creep.
4. **Verify** — check each requirement; confirm green build.
## Scala/Quarkus Rules
- `given`/`using` only (no `implicit`); `Option`/`Either`/`Try` (no `null`/`.get`)
- `jakarta.*` only; reactive I/O (`Uni`/`Multi`), no blocking on event loop
- Always exclude `org.scala-lang:scala-library` from Quarkus BOM
- Unit tests: `extends AnyFunSuite with Matchers` — no `@Test`, no `: Unit`
- Integration tests: `@QuarkusTest` + JUnit 5 — `@Test` methods need explicit `: Unit`
## Coverage
Line = 100% · Branch = 100% · Method = 100% · Regression tests · document exceptions
Check: `jacoco-reporter/scoverage_coverage_gaps.py modules/{svc}/build/reports/scoverageTest/scoverage.xml`
⚠️ Use `scoverageTest/`, NOT `scoverage/`.
## Bug Fixing
Fix failures immediately without asking. After 3 failed attempts → log in `docs/unresolved.md` + surface summary.
## Agents (new service)
Sequential: architect → scala-implementer → test-writer → gradle-builder → code-reviewer (review only, no self-fix)
Parallel: only when services are fully independent (no shared contracts/state).
## Unresolved (`docs/unresolved.md`)
Append only, never delete:
```
## [YYYY-MM-DD] <title>
**Requirement/Bug:** **Root Cause:** **Attempted Fixes:** **Next Step:**
./clean # Clear build dirs — only when necessary
./compile # Compile all modules — always run
./test # Run all tests
./coverage # Check coverage
```
Try to stick to these commands for consistency.
## Done Checklist
- [ ] Plan written · files created/modified · tests green · requirements verified · unresolved logged
## Modules
| Module | Role | Depends on |
|--------|------|-----------|
| `api` | Model / shared types | (none) |
| `core` | Primary business logic | api, rule |
| `rule` | Game rules | api |
| `io` | Export formats | api, core |
| `ui` | Entrypoint & UI | core, io |
## Style
- Use immutable data and pure functions.
- Keep functions under 30 lines. If you need "and" to describe it, split it.
- Keep cyclomatic complexity under 15.
- Avoid comments. Let names carry intent; comment only non-obvious algorithms.
- Scan for duplicated logic before finishing. Extract it.
- Follow default Sonar style for Scala.
- Use `Option` or `Either` for fallible operations; avoid exceptions for control flow.
- Naming: types are PascalCase, functions/values are camelCase.
## Code Quality
- **Coverage:** 100% condition coverage required in `api`, `core`, `rule`, `io` (mandatory); `ui` exempt.
## Architecture Decisions
- **Immutable state as primary model:** GameContext (api) holds board, history, player state — immutable, passed through the system. Each move creates a new GameContext, enabling undo/redo without side effects.
- **Observer pattern for UI decoupling:** GameEngine publishes move/state events; CommandInvoker queues moves; UI listens to events, not polling. GameEngine never imports UI code.
- **RuleSet trait encapsulates rules:** Move generation, check, castling, en passant all in RuleSet impl. GameEngine calls rules as a black box; rules don't know about the rest of core.
## Rules
- **Tests are the spec.** Never modify tests to pass; modify requirements or code. Update tests only if requirements change.
- Never read build folders. Ask permission if needed.
- Keep this file up to date with any important decisions or conventions.
---
## Instructions for Claude Code
### Two-Step Rule (mandatory)
**Step 1 — Orient:** Use wiki articles to find WHERE things live.
**Step 2 — Verify:** Read the actual source files listed in the wiki article BEFORE writing any code.
Wiki articles are structural summaries extracted by AST. They show routes, models, and file locations.
They do NOT show full function logic, middleware internals, or dynamic runtime behavior.
**Never write or modify code based solely on wiki content — always read source files first.**
Read in order at session start:
1. `.codesight/wiki/index.md` — orientation map (~200 tokens)
2. `.codesight/wiki/overview.md` — architecture overview (~500 tokens)
3. Domain article (e.g. `.codesight/wiki/auth.md`) → check "Source Files" section → read those files
4. `.codesight/CODESIGHT.md` — full context map for deep exploration
Routes marked `[inferred]` in wiki articles were detected via regex — verify against source before trusting.
If any source file shows ⚠ in the wiki, re-run `codesight --wiki` before proceeding.
Or use the codesight MCP server for on-demand queries:
- `codesight_get_wiki_article` — read a specific wiki article by name
- `codesight_get_wiki_index` — get the wiki index
- `codesight_get_summary` — quick project overview
- `codesight_get_routes --prefix /api/users` — filtered routes
- `codesight_get_blast_radius --file src/lib/db.ts` — impact analysis before changes
- `codesight_get_schema --model users` — specific model details
Only open specific files after consulting codesight context. This saves ~16.893 tokens per conversation.
## graphify
This project has a graphify knowledge graph at graphify-out/.
Rules:
- Before answering architecture or codebase questions, read graphify-out/GRAPH_REPORT.md for god nodes and community structure
- If graphify-out/wiki/index.md exists, navigate it instead of reading raw files
- After modifying code files in this session, run `python3 -c "from graphify.watch import _rebuild_code; from pathlib import Path; _rebuild_code(Path('.'))"` to keep the graph current
+5 -1
View File
@@ -32,7 +32,11 @@ val versions = mapOf(
"SCOVERAGE" to "2.1.1",
"SCALAFX" to "21.0.0-R32",
"JAVAFX" to "21.0.1",
"JUNIT_BOM" to "5.13.4"
"JUNIT_BOM" to "5.13.4",
"SCALA_PARSER_COMBINATORS" to "2.4.0",
"FASTPARSE" to "3.0.2",
"JACKSON" to "2.17.2",
"JACKSON_SCALA" to "2.17.2"
)
extra["VERSIONS"] = versions
Regular → Executable
View File
Regular → Executable
View File
+776
View File
@@ -0,0 +1,776 @@
openapi: 3.0.3
info:
title: NowChess API
description: |
REST API for the NowChess application. Designed to feel familiar to users
of the [lichess API](https://lichess.org/api).
## Authentication
Most endpoints require a Bearer token:
```
Authorization: Bearer <token>
```
Authentication is reserved for future implementation — endpoints are currently
open unless noted otherwise.
## Move notation
Moves are expressed in **UCI notation**: `{from}{to}[promotion]`
- Normal move: `e2e4`
- Capture: `d5e6`
- Promotion: `e7e8q` (q=queen, r=rook, b=bishop, n=knight)
- Castling: `e1g1` (kingside white), `e1c1` (queenside white)
## Streaming
Endpoints that support streaming return **NDJSON** (newline-delimited JSON).
Request them with:
```
Accept: application/x-ndjson
```
Each line of the response is a complete JSON object. Empty lines are
keep-alive heartbeats.
## Rate limiting
Requests that exceed the rate limit receive `429 Too Many Requests`.
Honour the `Retry-After` response header and wait before retrying.
version: 1.0.0
contact:
name: NowChess
license:
name: MIT
servers:
- url: http://localhost:8080
description: Local development server
tags:
- name: game
description: Create and manage chess games
- name: move
description: Make moves and navigate game history
- name: draw
description: Draw offers and claims
- name: import
description: Load a game from FEN or PGN
- name: export
description: Export a game as FEN or PGN
paths:
# ---------------------------------------------------------------------------
# Game lifecycle
# ---------------------------------------------------------------------------
/api/board/game:
post:
operationId: createGame
tags: [game]
summary: Create a new game
description: |
Creates a new chess game starting from the initial position.
Returns the full game state including the generated `gameId`.
security:
- bearerAuth: []
requestBody:
required: false
content:
application/json:
schema:
$ref: '#/components/schemas/CreateGameRequest'
responses:
'201':
description: Game created
content:
application/json:
schema:
$ref: '#/components/schemas/GameFull'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/TooManyRequests'
/api/board/game/{gameId}:
get:
operationId: getGame
tags: [game]
summary: Get game state
description: Returns the full current state of a game.
security:
- bearerAuth: []
parameters:
- $ref: '#/components/parameters/gameId'
responses:
'200':
description: Current game state
content:
application/json:
schema:
$ref: '#/components/schemas/GameFull'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
/api/board/game/{gameId}/stream:
get:
operationId: streamGame
tags: [game]
summary: Stream game events
description: |
Opens a persistent NDJSON stream for a game. The first object sent is
a `gameFull` event containing the complete game state. Subsequent
objects are `gameState` events sent whenever the game changes (move
made, draw offered, game over, etc.).
Empty lines are heartbeats to keep the connection alive.
Connect with:
```
Accept: application/x-ndjson
```
security:
- bearerAuth: []
parameters:
- $ref: '#/components/parameters/gameId'
responses:
'200':
description: NDJSON event stream
content:
application/x-ndjson:
schema:
oneOf:
- $ref: '#/components/schemas/GameFullEvent'
- $ref: '#/components/schemas/GameStateEvent'
- $ref: '#/components/schemas/ErrorEvent'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
/api/board/game/{gameId}/resign:
post:
operationId: resignGame
tags: [game]
summary: Resign the game
description: The active player resigns. The game ends immediately.
security:
- bearerAuth: []
parameters:
- $ref: '#/components/parameters/gameId'
responses:
'200':
description: Resignation accepted
content:
application/json:
schema:
$ref: '#/components/schemas/OkResponse'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
# ---------------------------------------------------------------------------
# Move-making
# ---------------------------------------------------------------------------
/api/board/game/{gameId}/move/{uci}:
post:
operationId: makeMove
tags: [move]
summary: Make a move
description: |
Submit a move in UCI notation. The move must be legal for the side
currently to move.
For promotion moves include the target piece as the fifth character:
`e7e8q`, `a2a1r`, etc.
If the move results in a pawn reaching the back rank and no promotion
character is supplied, the game enters `promotionPending` status and
the move is not yet applied — resubmit with the promotion character.
security:
- bearerAuth: []
parameters:
- $ref: '#/components/parameters/gameId'
- name: uci
in: path
required: true
description: Move in UCI notation (e.g. `e2e4`, `e7e8q`)
schema:
type: string
pattern: '^[a-h][1-8][a-h][1-8][qrbn]?$'
example: e2e4
responses:
'200':
description: Move applied — returns updated game state
content:
application/json:
schema:
$ref: '#/components/schemas/GameState'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
/api/board/game/{gameId}/moves:
get:
operationId: getLegalMoves
tags: [move]
summary: Get legal moves
description: |
Returns all legal moves for the side currently to move.
Optionally filter to moves originating from a single square.
security:
- bearerAuth: []
parameters:
- $ref: '#/components/parameters/gameId'
- name: square
in: query
required: false
description: Filter to moves from this square (e.g. `e2`)
schema:
type: string
pattern: '^[a-h][1-8]$'
example: e2
responses:
'200':
description: List of legal moves
content:
application/json:
schema:
$ref: '#/components/schemas/LegalMovesResponse'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
/api/board/game/{gameId}/undo:
post:
operationId: undoMove
tags: [move]
summary: Undo the last move
description: Reverts the most recent move. Returns the updated game state.
security:
- bearerAuth: []
parameters:
- $ref: '#/components/parameters/gameId'
responses:
'200':
description: Move undone
content:
application/json:
schema:
$ref: '#/components/schemas/GameState'
'400':
description: No moves to undo
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
/api/board/game/{gameId}/redo:
post:
operationId: redoMove
tags: [move]
summary: Redo a previously undone move
description: Re-applies the next move in the undo stack. Returns the updated game state.
security:
- bearerAuth: []
parameters:
- $ref: '#/components/parameters/gameId'
responses:
'200':
description: Move redone
content:
application/json:
schema:
$ref: '#/components/schemas/GameState'
'400':
description: No moves to redo
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
# ---------------------------------------------------------------------------
# Draw handling
# ---------------------------------------------------------------------------
/api/board/game/{gameId}/draw/{action}:
post:
operationId: drawAction
tags: [draw]
summary: Offer, accept, decline, or claim a draw
description: |
Perform a draw-related action:
| Action | Description |
|-----------|-------------|
| `offer` | Offer a draw to the opponent |
| `accept` | Accept the opponent's draw offer |
| `decline` | Decline the opponent's draw offer |
| `claim` | Claim a draw under the fifty-move rule (only valid when `status` is `fiftyMoveAvailable`) |
security:
- bearerAuth: []
parameters:
- $ref: '#/components/parameters/gameId'
- name: action
in: path
required: true
schema:
type: string
enum: [offer, accept, decline, claim]
responses:
'200':
description: Action accepted
content:
application/json:
schema:
$ref: '#/components/schemas/OkResponse'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
# ---------------------------------------------------------------------------
# Import
# ---------------------------------------------------------------------------
/api/board/game/import/fen:
post:
operationId: importFen
tags: [import]
summary: Load a position from FEN
description: |
Creates a new game from a FEN string. The game starts at the position
described by the FEN; move history prior to that position is not
available.
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ImportFenRequest'
responses:
'201':
description: Game created from FEN
content:
application/json:
schema:
$ref: '#/components/schemas/GameFull'
'400':
$ref: '#/components/responses/BadRequest'
'429':
$ref: '#/components/responses/TooManyRequests'
/api/board/game/import/pgn:
post:
operationId: importPgn
tags: [import]
summary: Load a game from PGN
description: |
Creates a new game by replaying all moves in a PGN string. The game
starts at the position after the final move in the PGN; undo is
available for every replayed move.
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ImportPgnRequest'
responses:
'201':
description: Game created from PGN
content:
application/json:
schema:
$ref: '#/components/schemas/GameFull'
'400':
$ref: '#/components/responses/BadRequest'
'429':
$ref: '#/components/responses/TooManyRequests'
# ---------------------------------------------------------------------------
# Export
# ---------------------------------------------------------------------------
/api/board/game/{gameId}/export/fen:
get:
operationId: exportFen
tags: [export]
summary: Export current position as FEN
description: Returns the FEN string representing the current board position.
security:
- bearerAuth: []
parameters:
- $ref: '#/components/parameters/gameId'
responses:
'200':
description: FEN string
content:
text/plain:
schema:
type: string
example: rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq e3 0 1
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
/api/board/game/{gameId}/export/pgn:
get:
operationId: exportPgn
tags: [export]
summary: Export game as PGN
description: Returns the full PGN for the game including headers and move text.
security:
- bearerAuth: []
parameters:
- $ref: '#/components/parameters/gameId'
responses:
'200':
description: PGN text
content:
application/x-chess-pgn:
schema:
type: string
example: |
[Event "NowChess game"]
[White "Player1"]
[Black "Player2"]
[Result "*"]
1. e4 e5 2. Nf3 *
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
# =============================================================================
# Components
# =============================================================================
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: 'Personal access token — `Authorization: Bearer <token>`'
parameters:
gameId:
name: gameId
in: path
required: true
description: 8-character alphanumeric game ID (e.g. `Qa7FJNk2`)
schema:
type: string
pattern: '^[A-Za-z0-9]{8}$'
example: Qa7FJNk2
responses:
BadRequest:
description: Invalid input
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
Unauthorized:
description: Missing or invalid authentication token
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
NotFound:
description: Game not found
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
TooManyRequests:
description: Rate limit exceeded — see `Retry-After` header
headers:
Retry-After:
description: Seconds to wait before retrying
schema:
type: integer
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
schemas:
# -------------------------------------------------------------------------
# Requests
# -------------------------------------------------------------------------
CreateGameRequest:
type: object
description: Parameters for creating a new game. All fields are optional.
properties:
white:
$ref: '#/components/schemas/PlayerInfo'
black:
$ref: '#/components/schemas/PlayerInfo'
ImportFenRequest:
type: object
required: [fen]
properties:
fen:
type: string
description: Complete FEN string (6 fields)
example: rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
white:
$ref: '#/components/schemas/PlayerInfo'
black:
$ref: '#/components/schemas/PlayerInfo'
ImportPgnRequest:
type: object
required: [pgn]
properties:
pgn:
type: string
description: PGN text (headers and move list)
example: "1. e4 e5 2. Nf3 Nc6 *"
# -------------------------------------------------------------------------
# Game state
# -------------------------------------------------------------------------
GameFull:
type: object
description: Complete game information including players and current state.
required: [gameId, white, black, state]
properties:
gameId:
type: string
description: Unique 8-character game identifier
example: Qa7FJNk2
white:
$ref: '#/components/schemas/PlayerInfo'
black:
$ref: '#/components/schemas/PlayerInfo'
state:
$ref: '#/components/schemas/GameState'
GameState:
type: object
description: |
The current game state. Included in `GameFull` and returned by move
endpoints and stream events.
required: [fen, pgn, turn, status, moves, undoAvailable, redoAvailable]
properties:
fen:
type: string
description: FEN string for the current position
example: rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq e3 0 1
pgn:
type: string
description: PGN move text for the full game so far
example: "1. e4"
turn:
type: string
enum: [white, black]
description: The side to move
status:
$ref: '#/components/schemas/GameStatus'
winner:
type: string
enum: [white, black]
description: Set when `status` is `checkmate` or `resign`
nullable: true
moves:
type: array
description: All moves played so far, in UCI notation
items:
type: string
example: [e2e4, e7e5, g1f3]
undoAvailable:
type: boolean
description: Whether `POST /undo` is currently valid
redoAvailable:
type: boolean
description: Whether `POST /redo` is currently valid
GameStatus:
type: string
description: |
Current game status:
| Value | Meaning |
|-------|---------|
| `started` | Game in progress, no special condition |
| `check` | Side to move is in check |
| `checkmate` | Side to move is checkmated — game over |
| `stalemate` | Side to move has no legal moves, not in check — game over (draw) |
| `resign` | A player resigned — game over |
| `draw` | Draw agreed or claimed — game over |
| `drawOffered` | Waiting for the opponent to accept or decline a draw offer |
| `fiftyMoveAvailable` | Fifty-move rule threshold reached; active player may claim draw |
| `promotionPending` | A pawn reached the back rank; awaiting promotion piece selection |
| `insufficientMaterial` | Neither side has enough pieces to deliver checkmate — game over (draw) |
enum:
- started
- check
- checkmate
- stalemate
- resign
- draw
- drawOffered
- fiftyMoveAvailable
- promotionPending
- insufficientMaterial
# -------------------------------------------------------------------------
# Moves
# -------------------------------------------------------------------------
LegalMovesResponse:
type: object
required: [moves]
properties:
moves:
type: array
items:
$ref: '#/components/schemas/LegalMove'
LegalMove:
type: object
required: [from, to, uci, moveType]
properties:
from:
type: string
description: Origin square in algebraic notation
example: e2
to:
type: string
description: Destination square in algebraic notation
example: e4
uci:
type: string
description: Full move in UCI notation
example: e2e4
moveType:
$ref: '#/components/schemas/MoveType'
promotion:
type: string
enum: [queen, rook, bishop, knight]
description: Target piece for promotion moves
nullable: true
MoveType:
type: string
description: Classification of the move
enum:
- normal
- capture
- castleKingside
- castleQueenside
- enPassant
- promotion
# -------------------------------------------------------------------------
# Streaming events
# -------------------------------------------------------------------------
GameFullEvent:
type: object
description: |
First event on a game stream. Contains the complete game snapshot.
required: [type, game]
properties:
type:
type: string
enum: [gameFull]
game:
$ref: '#/components/schemas/GameFull'
GameStateEvent:
type: object
description: |
Emitted on a game stream whenever the game state changes (move played,
draw offered, game over, etc.).
required: [type, state]
properties:
type:
type: string
enum: [gameState]
state:
$ref: '#/components/schemas/GameState'
ErrorEvent:
type: object
description: Emitted on a game stream when an error occurs.
required: [type, error]
properties:
type:
type: string
enum: [error]
error:
$ref: '#/components/schemas/ApiError'
# -------------------------------------------------------------------------
# Shared types
# -------------------------------------------------------------------------
PlayerInfo:
type: object
required: [id, displayName]
properties:
id:
type: string
description: Unique player identifier
example: player1
displayName:
type: string
description: Human-readable display name
example: Alice
OkResponse:
type: object
required: [ok]
properties:
ok:
type: boolean
enum: [true]
ApiError:
type: object
required: [code, message]
properties:
code:
type: string
description: Machine-readable error code
example: INVALID_MOVE
message:
type: string
description: Human-readable error description
example: e2e5 is not a legal move
field:
type: string
description: Request field that caused the error, if applicable
example: uci
nullable: true
-20
View File
@@ -1,20 +0,0 @@
## [2026-03-31] Unreachable code blocking 100% statement coverage
**Requirement/Bug:** Reach 100% statement coverage in core module.
**Root Cause:** 4 remaining uncovered statements (99.6% coverage) are unreachable code:
1. **PgnParser.scala:160** (`case _ => None` in extractPromotion) - Regex `=([QRBN])` only matches those 4 characters; fallback case can never execute
2. **GameHistory.scala:29** (`addMove$default$4` compiler-generated method) - Method overload 3 without defaults shadows the 4-param version, making promotionPiece default accessor unreachable
3. **GameEngine.scala:201-202** (`case _` in completePromotion) - GameController.completePromotion always returns one of 4 expected MoveResult types; catch-all is defensive code
**Attempted Fixes:**
1. Added comprehensive PGN parsing tests (all 4 promotion types) - PgnParser improved from 95.8% to 99.4%
2. Added GameHistory tests using named parameters - hit `addMove$default$3` (castleSide) but not `$default$4` (promotionPiece)
3. Named parameter approach: `addMove(from=..., to=..., promotionPiece=...)` triggers 4-param with castleSide default ✓
4. Positional approach: `addMove(f, t, None, None)` requires all 4 args (explicit, no defaults used) - doesn't hit $default$4
5. Root issue: Scala's overload resolution prefers more-specific non-default overloads (2-param, 3-param) over the 4-param with defaults
**Recommendation:** 99.6% (1029/1033) is maximum achievable without refactoring method overloads. Unreachable code design patterns:
- **Pattern 1 (unreachable regex fallback):** Defensive pattern match against exhaustive regex
- **Pattern 2 (overshadowed defaults):** Method overloads shadow default parameters in parent signature
- **Pattern 3 (defensive catch-all):** Error handling for impossible external API returns
+396
View File
@@ -0,0 +1,396 @@
{
"nodes": [
{
"id": "claude_md_project_instructions",
"label": "Now-Chess Project Instructions (CLAUDE.md)",
"file_type": "document",
"source_file": "CLAUDE.md",
"source_location": null,
"source_url": null,
"captured_at": null,
"author": null,
"contributor": null
},
{
"id": "agents_md_config",
"label": "Agents Configuration (AGENTS.md)",
"file_type": "document",
"source_file": "AGENTS.md",
"source_location": null,
"source_url": null,
"captured_at": null,
"author": null,
"contributor": null
},
{
"id": "api_changelog",
"label": "API Module Changelog",
"file_type": "document",
"source_file": "modules/api/CHANGELOG.md",
"source_location": null,
"source_url": null,
"captured_at": null,
"author": null,
"contributor": null
},
{
"id": "ui_changelog",
"label": "UI Module Changelog",
"file_type": "document",
"source_file": "modules/ui/CHANGELOG.md",
"source_location": null,
"source_url": null,
"captured_at": null,
"author": null,
"contributor": null
},
{
"id": "rule_changelog",
"label": "Rule Module Changelog",
"file_type": "document",
"source_file": "modules/rule/CHANGELOG.md",
"source_location": null,
"source_url": null,
"captured_at": null,
"author": null,
"contributor": null
},
{
"id": "io_changelog",
"label": "IO Module Changelog",
"file_type": "document",
"source_file": "modules/io/CHANGELOG.md",
"source_location": null,
"source_url": null,
"captured_at": null,
"author": null,
"contributor": null
},
{
"id": "core_changelog",
"label": "Core Module Changelog",
"file_type": "document",
"source_file": "modules/core/CHANGELOG.md",
"source_location": null,
"source_url": null,
"captured_at": null,
"author": null,
"contributor": null
},
{
"id": "bot_python_readme",
"label": "Bot Python Module README",
"file_type": "document",
"source_file": "modules/bot/python/README.md",
"source_location": null,
"source_url": null,
"captured_at": null,
"author": null,
"contributor": null
},
{
"id": "bot_python_requirements",
"label": "Bot Python Requirements",
"file_type": "document",
"source_file": "modules/bot/python/requirements.txt",
"source_location": null,
"source_url": null,
"captured_at": null,
"author": null,
"contributor": null
},
{
"id": "bot_python_positions",
"label": "Bot Python Positions Dataset",
"file_type": "document",
"source_file": "modules/bot/python/data/positions.txt",
"source_location": null,
"source_url": null,
"captured_at": null,
"author": null,
"contributor": null
},
{
"id": "security_doc",
"label": "Security Documentation",
"file_type": "document",
"source_file": "docs/Security.md",
"source_location": null,
"source_url": null,
"captured_at": null,
"author": null,
"contributor": null
},
{
"id": "claude_skills_doc",
"label": "Claude Skills Documentation",
"file_type": "document",
"source_file": "docs/Claude-Skills.md",
"source_location": null,
"source_url": null,
"captured_at": null,
"author": null,
"contributor": null
},
{
"id": "idea_doc",
"label": "Idea Documentation",
"file_type": "document",
"source_file": "docs/idea.md",
"source_location": null,
"source_url": null,
"captured_at": null,
"author": null,
"contributor": null
},
{
"id": "arabian_chess_license",
"label": "Arabian Chess License",
"file_type": "document",
"source_file": "ARABIAN CHESS/license.txt",
"source_location": null,
"source_url": null,
"captured_at": null,
"author": null,
"contributor": null
},
{
"id": "ui_board_sprite_black",
"label": "UI Board Square Black Sprite",
"file_type": "image",
"source_file": "modules/ui/src/main/resources/sprites/board/board_square_black.png",
"source_location": null,
"source_url": null,
"captured_at": null,
"author": null,
"contributor": null
},
{
"id": "ui_board_sprite_white",
"label": "UI Board Square White Sprite",
"file_type": "image",
"source_file": "modules/ui/src/main/resources/sprites/board/board_square_white.png",
"source_location": null,
"source_url": null,
"captured_at": null,
"author": null,
"contributor": null
},
{
"id": "ui_board_sprite_bottom",
"label": "UI Board Bottom Sprite",
"file_type": "image",
"source_file": "modules/ui/src/main/resources/sprites/board/board_bottom.png",
"source_location": null,
"source_url": null,
"captured_at": null,
"author": null,
"contributor": null
},
{
"id": "ui_piece_sprite_black_rook",
"label": "UI Black Rook Piece Sprite",
"file_type": "image",
"source_file": "modules/ui/src/main/resources/sprites/pieces/black_rook.png",
"source_location": null,
"source_url": null,
"captured_at": null,
"author": null,
"contributor": null
},
{
"id": "ui_piece_sprite_white_pawn",
"label": "UI White Pawn Piece Sprite",
"file_type": "image",
"source_file": "modules/ui/src/main/resources/sprites/pieces/white_pawn.png",
"source_location": null,
"source_url": null,
"captured_at": null,
"author": null,
"contributor": null
},
{
"id": "ui_piece_sprite_white_knight",
"label": "UI White Knight Piece Sprite",
"file_type": "image",
"source_file": "modules/ui/src/main/resources/sprites/pieces/white_knight.png",
"source_location": null,
"source_url": null,
"captured_at": null,
"author": null,
"contributor": null
},
{
"id": "ui_piece_sprite_black_knight",
"label": "UI Black Knight Piece Sprite",
"file_type": "image",
"source_file": "modules/ui/src/main/resources/sprites/pieces/black_knight.png",
"source_location": null,
"source_url": null,
"captured_at": null,
"author": null,
"contributor": null
}
],
"edges": [
{
"source": "claude_md_project_instructions",
"target": "agents_md_config",
"relation": "references",
"confidence": "EXTRACTED",
"confidence_score": 1.0,
"source_file": "CLAUDE.md",
"source_location": null,
"weight": 1.0
},
{
"source": "bot_python_readme",
"target": "bot_python_requirements",
"relation": "references",
"confidence": "INFERRED",
"confidence_score": 0.85,
"source_file": "modules/bot/python/README.md",
"source_location": null,
"weight": 1.0
},
{
"source": "bot_python_readme",
"target": "bot_python_positions",
"relation": "references",
"confidence": "INFERRED",
"confidence_score": 0.8,
"source_file": "modules/bot/python/README.md",
"source_location": null,
"weight": 1.0
},
{
"source": "ui_changelog",
"target": "ui_board_sprite_black",
"relation": "references",
"confidence": "INFERRED",
"confidence_score": 0.75,
"source_file": "modules/ui/CHANGELOG.md",
"source_location": null,
"weight": 1.0
},
{
"source": "ui_changelog",
"target": "ui_board_sprite_white",
"relation": "references",
"confidence": "INFERRED",
"confidence_score": 0.75,
"source_file": "modules/ui/CHANGELOG.md",
"source_location": null,
"weight": 1.0
},
{
"source": "ui_changelog",
"target": "ui_piece_sprite_black_rook",
"relation": "references",
"confidence": "INFERRED",
"confidence_score": 0.75,
"source_file": "modules/ui/CHANGELOG.md",
"source_location": null,
"weight": 1.0
},
{
"source": "ui_changelog",
"target": "ui_piece_sprite_white_pawn",
"relation": "references",
"confidence": "INFERRED",
"confidence_score": 0.75,
"source_file": "modules/ui/CHANGELOG.md",
"source_location": null,
"weight": 1.0
},
{
"source": "ui_changelog",
"target": "ui_piece_sprite_white_knight",
"relation": "references",
"confidence": "INFERRED",
"confidence_score": 0.75,
"source_file": "modules/ui/CHANGELOG.md",
"source_location": null,
"weight": 1.0
},
{
"source": "ui_changelog",
"target": "ui_piece_sprite_black_knight",
"relation": "references",
"confidence": "INFERRED",
"confidence_score": 0.75,
"source_file": "modules/ui/CHANGELOG.md",
"source_location": null,
"weight": 1.0
},
{
"source": "ui_changelog",
"target": "ui_board_sprite_bottom",
"relation": "references",
"confidence": "INFERRED",
"confidence_score": 0.75,
"source_file": "modules/ui/CHANGELOG.md",
"source_location": null,
"weight": 1.0
},
{
"source": "claude_skills_doc",
"target": "agents_md_config",
"relation": "references",
"confidence": "INFERRED",
"confidence_score": 0.7,
"source_file": "docs/Claude-Skills.md",
"source_location": null,
"weight": 1.0
}
],
"hyperedges": [
{
"id": "module_changelogs",
"label": "Module Changelog Documentation",
"nodes": [
"api_changelog",
"ui_changelog",
"rule_changelog",
"io_changelog",
"core_changelog"
],
"relation": "form",
"confidence": "EXTRACTED",
"confidence_score": 1.0,
"source_file": "modules"
},
{
"id": "ui_sprite_assets",
"label": "UI Sprite Asset Collection",
"nodes": [
"ui_board_sprite_black",
"ui_board_sprite_white",
"ui_board_sprite_bottom",
"ui_piece_sprite_black_rook",
"ui_piece_sprite_white_pawn",
"ui_piece_sprite_white_knight",
"ui_piece_sprite_black_knight"
],
"relation": "participate_in",
"confidence": "EXTRACTED",
"confidence_score": 1.0,
"source_file": "modules/ui/src/main/resources/sprites"
},
{
"id": "bot_python_components",
"label": "Bot Python Implementation Components",
"nodes": [
"bot_python_readme",
"bot_python_requirements",
"bot_python_positions"
],
"relation": "participate_in",
"confidence": "EXTRACTED",
"confidence_score": 1.0,
"source_file": "modules/bot/python"
}
],
"input_tokens": 0,
"output_tokens": 0
}
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
/usr/bin/python
+413
View File
@@ -0,0 +1,413 @@
# 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._
@@ -0,0 +1 @@
{"nodes": [{"id": "commandinvokertest", "label": "CommandInvokerTest.scala", "file_type": "code", "source_file": "modules/core/src/test/scala/de/nowchess/chess/command/CommandInvokerTest.scala", "source_location": "L1"}, {"id": "commandinvokertest_commandinvokertest", "label": "CommandInvokerTest", "file_type": "code", "source_file": "modules/core/src/test/scala/de/nowchess/chess/command/CommandInvokerTest.scala", "source_location": "L8"}, {"id": "commandinvokertest_commandinvokertest_sq", "label": ".sq()", "file_type": "code", "source_file": "modules/core/src/test/scala/de/nowchess/chess/command/CommandInvokerTest.scala", "source_location": "L10"}, {"id": "commandinvokertest_commandinvokertest_createmovecommand", "label": ".createMoveCommand()", "file_type": "code", "source_file": "modules/core/src/test/scala/de/nowchess/chess/command/CommandInvokerTest.scala", "source_location": "L12"}], "edges": [{"source": "commandinvokertest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/command/CommandInvokerTest.scala", "source_location": "L3", "weight": 1.0}, {"source": "commandinvokertest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/command/CommandInvokerTest.scala", "source_location": "L4", "weight": 1.0}, {"source": "commandinvokertest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/command/CommandInvokerTest.scala", "source_location": "L5", "weight": 1.0}, {"source": "commandinvokertest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/command/CommandInvokerTest.scala", "source_location": "L6", "weight": 1.0}, {"source": "commandinvokertest", "target": "commandinvokertest_commandinvokertest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/command/CommandInvokerTest.scala", "source_location": "L8", "weight": 1.0}, {"source": "commandinvokertest_commandinvokertest", "target": "commandinvokertest_commandinvokertest_sq", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/command/CommandInvokerTest.scala", "source_location": "L10", "weight": 1.0}, {"source": "commandinvokertest_commandinvokertest", "target": "commandinvokertest_commandinvokertest_createmovecommand", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/command/CommandInvokerTest.scala", "source_location": "L12", "weight": 1.0}]}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "build_gradle", "label": "build.gradle.kts", "file_type": "code", "source_file": "modules/ui/build.gradle.kts", "source_location": "L1"}], "edges": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "nnuebot", "label": "NNUEBot.scala", "file_type": "code", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/bots/NNUEBot.scala", "source_location": "L1"}, {"id": "nnuebot_nnuebot", "label": "NNUEBot", "file_type": "code", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/bots/NNUEBot.scala", "source_location": "L12"}, {"id": "nnuebot_nnuebot_nextmove", "label": ".nextMove()", "file_type": "code", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/bots/NNUEBot.scala", "source_location": "L23"}], "edges": [{"source": "nnuebot", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/bots/NNUEBot.scala", "source_location": "L3", "weight": 1.0}, {"source": "nnuebot", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/bots/NNUEBot.scala", "source_location": "L4", "weight": 1.0}, {"source": "nnuebot", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/bots/NNUEBot.scala", "source_location": "L5", "weight": 1.0}, {"source": "nnuebot", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/bots/NNUEBot.scala", "source_location": "L6", "weight": 1.0}, {"source": "nnuebot", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/bots/NNUEBot.scala", "source_location": "L7", "weight": 1.0}, {"source": "nnuebot", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/bots/NNUEBot.scala", "source_location": "L8", "weight": 1.0}, {"source": "nnuebot", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/bots/NNUEBot.scala", "source_location": "L9", "weight": 1.0}, {"source": "nnuebot", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/bots/NNUEBot.scala", "source_location": "L10", "weight": 1.0}, {"source": "nnuebot", "target": "nnuebot_nnuebot", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/bots/NNUEBot.scala", "source_location": "L12", "weight": 1.0}, {"source": "nnuebot_nnuebot", "target": "nnuebot_nnuebot_nextmove", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/bots/NNUEBot.scala", "source_location": "L23", "weight": 1.0}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "pgnexporter", "label": "PgnExporter.scala", "file_type": "code", "source_file": "modules/io/src/main/scala/de/nowchess/io/pgn/PgnExporter.scala", "source_location": "L1"}, {"id": "pgnexporter_pgnexporter", "label": "PgnExporter", "file_type": "code", "source_file": "modules/io/src/main/scala/de/nowchess/io/pgn/PgnExporter.scala", "source_location": "L9"}, {"id": "pgnexporter_pgnexporter_exportgamecontext", "label": ".exportGameContext()", "file_type": "code", "source_file": "modules/io/src/main/scala/de/nowchess/io/pgn/PgnExporter.scala", "source_location": "L12"}, {"id": "pgnexporter_pgnexporter_exportgame", "label": ".exportGame()", "file_type": "code", "source_file": "modules/io/src/main/scala/de/nowchess/io/pgn/PgnExporter.scala", "source_location": "L23"}, {"id": "pgnexporter_pgnexporter_movetoalgebraic", "label": ".moveToAlgebraic()", "file_type": "code", "source_file": "modules/io/src/main/scala/de/nowchess/io/pgn/PgnExporter.scala", "source_location": "L53"}], "edges": [{"source": "pgnexporter", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/io/src/main/scala/de/nowchess/io/pgn/PgnExporter.scala", "source_location": "L3", "weight": 1.0}, {"source": "pgnexporter", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/io/src/main/scala/de/nowchess/io/pgn/PgnExporter.scala", "source_location": "L4", "weight": 1.0}, {"source": "pgnexporter", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/io/src/main/scala/de/nowchess/io/pgn/PgnExporter.scala", "source_location": "L5", "weight": 1.0}, {"source": "pgnexporter", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/io/src/main/scala/de/nowchess/io/pgn/PgnExporter.scala", "source_location": "L6", "weight": 1.0}, {"source": "pgnexporter", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/io/src/main/scala/de/nowchess/io/pgn/PgnExporter.scala", "source_location": "L7", "weight": 1.0}, {"source": "pgnexporter", "target": "pgnexporter_pgnexporter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/io/src/main/scala/de/nowchess/io/pgn/PgnExporter.scala", "source_location": "L9", "weight": 1.0}, {"source": "pgnexporter_pgnexporter", "target": "pgnexporter_pgnexporter_exportgamecontext", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/io/src/main/scala/de/nowchess/io/pgn/PgnExporter.scala", "source_location": "L12", "weight": 1.0}, {"source": "pgnexporter_pgnexporter", "target": "pgnexporter_pgnexporter_exportgame", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/io/src/main/scala/de/nowchess/io/pgn/PgnExporter.scala", "source_location": "L23", "weight": 1.0}, {"source": "pgnexporter_pgnexporter", "target": "pgnexporter_pgnexporter_movetoalgebraic", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/io/src/main/scala/de/nowchess/io/pgn/PgnExporter.scala", "source_location": "L53", "weight": 1.0}, {"source": "pgnexporter_pgnexporter_exportgamecontext", "target": "pgnexporter_pgnexporter_exportgame", "relation": "calls", "confidence": "EXTRACTED", "source_file": "modules/io/src/main/scala/de/nowchess/io/pgn/PgnExporter.scala", "source_location": "L20", "weight": 1.0}, {"source": "pgnexporter_pgnexporter_exportgame", "target": "pgnexporter_pgnexporter_movetoalgebraic", "relation": "calls", "confidence": "EXTRACTED", "source_file": "modules/io/src/main/scala/de/nowchess/io/pgn/PgnExporter.scala", "source_location": "L32", "weight": 1.0}]}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "piece", "label": "Piece.scala", "file_type": "code", "source_file": "modules/api/src/main/scala/de/nowchess/api/board/Piece.scala", "source_location": "L1"}, {"id": "piece_piece", "label": "Piece", "file_type": "code", "source_file": "modules/api/src/main/scala/de/nowchess/api/board/Piece.scala", "source_location": "L4"}], "edges": [{"source": "piece", "target": "piece_piece", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/board/Piece.scala", "source_location": "L4", "weight": 1.0}, {"source": "piece", "target": "piece_piece", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/board/Piece.scala", "source_location": "L6", "weight": 1.0}]}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "commandinvoker", "label": "CommandInvoker.scala", "file_type": "code", "source_file": "modules/core/src/main/scala/de/nowchess/chess/command/CommandInvoker.scala", "source_location": "L1"}, {"id": "commandinvoker_commandinvoker", "label": "CommandInvoker", "file_type": "code", "source_file": "modules/core/src/main/scala/de/nowchess/chess/command/CommandInvoker.scala", "source_location": "L4"}, {"id": "commandinvoker_commandinvoker_execute", "label": ".execute()", "file_type": "code", "source_file": "modules/core/src/main/scala/de/nowchess/chess/command/CommandInvoker.scala", "source_location": "L11"}, {"id": "commandinvoker_commandinvoker_undo", "label": ".undo()", "file_type": "code", "source_file": "modules/core/src/main/scala/de/nowchess/chess/command/CommandInvoker.scala", "source_location": "L24"}, {"id": "commandinvoker_commandinvoker_redo", "label": ".redo()", "file_type": "code", "source_file": "modules/core/src/main/scala/de/nowchess/chess/command/CommandInvoker.scala", "source_location": "L37"}, {"id": "commandinvoker_commandinvoker_history", "label": ".history()", "file_type": "code", "source_file": "modules/core/src/main/scala/de/nowchess/chess/command/CommandInvoker.scala", "source_location": "L50"}, {"id": "commandinvoker_commandinvoker_getcurrentindex", "label": ".getCurrentIndex()", "file_type": "code", "source_file": "modules/core/src/main/scala/de/nowchess/chess/command/CommandInvoker.scala", "source_location": "L55"}, {"id": "commandinvoker_commandinvoker_clear", "label": ".clear()", "file_type": "code", "source_file": "modules/core/src/main/scala/de/nowchess/chess/command/CommandInvoker.scala", "source_location": "L60"}, {"id": "commandinvoker_commandinvoker_canundo", "label": ".canUndo()", "file_type": "code", "source_file": "modules/core/src/main/scala/de/nowchess/chess/command/CommandInvoker.scala", "source_location": "L66"}, {"id": "commandinvoker_commandinvoker_canredo", "label": ".canRedo()", "file_type": "code", "source_file": "modules/core/src/main/scala/de/nowchess/chess/command/CommandInvoker.scala", "source_location": "L71"}], "edges": [{"source": "commandinvoker", "target": "commandinvoker_commandinvoker", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/core/src/main/scala/de/nowchess/chess/command/CommandInvoker.scala", "source_location": "L4", "weight": 1.0}, {"source": "commandinvoker_commandinvoker", "target": "commandinvoker_commandinvoker_execute", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/core/src/main/scala/de/nowchess/chess/command/CommandInvoker.scala", "source_location": "L11", "weight": 1.0}, {"source": "commandinvoker_commandinvoker", "target": "commandinvoker_commandinvoker_undo", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/core/src/main/scala/de/nowchess/chess/command/CommandInvoker.scala", "source_location": "L24", "weight": 1.0}, {"source": "commandinvoker_commandinvoker", "target": "commandinvoker_commandinvoker_redo", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/core/src/main/scala/de/nowchess/chess/command/CommandInvoker.scala", "source_location": "L37", "weight": 1.0}, {"source": "commandinvoker_commandinvoker", "target": "commandinvoker_commandinvoker_history", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/core/src/main/scala/de/nowchess/chess/command/CommandInvoker.scala", "source_location": "L50", "weight": 1.0}, {"source": "commandinvoker_commandinvoker", "target": "commandinvoker_commandinvoker_getcurrentindex", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/core/src/main/scala/de/nowchess/chess/command/CommandInvoker.scala", "source_location": "L55", "weight": 1.0}, {"source": "commandinvoker_commandinvoker", "target": "commandinvoker_commandinvoker_clear", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/core/src/main/scala/de/nowchess/chess/command/CommandInvoker.scala", "source_location": "L60", "weight": 1.0}, {"source": "commandinvoker_commandinvoker", "target": "commandinvoker_commandinvoker_canundo", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/core/src/main/scala/de/nowchess/chess/command/CommandInvoker.scala", "source_location": "L66", "weight": 1.0}, {"source": "commandinvoker_commandinvoker", "target": "commandinvoker_commandinvoker_canredo", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/core/src/main/scala/de/nowchess/chess/command/CommandInvoker.scala", "source_location": "L71", "weight": 1.0}, {"source": "commandinvoker_commandinvoker_redo", "target": "commandinvoker_commandinvoker_execute", "relation": "calls", "confidence": "EXTRACTED", "source_file": "modules/core/src/main/scala/de/nowchess/chess/command/CommandInvoker.scala", "source_location": "L40", "weight": 1.0}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "squaretest", "label": "SquareTest.scala", "file_type": "code", "source_file": "modules/api/src/test/scala/de/nowchess/api/board/SquareTest.scala", "source_location": "L1"}, {"id": "squaretest_squaretest", "label": "SquareTest", "file_type": "code", "source_file": "modules/api/src/test/scala/de/nowchess/api/board/SquareTest.scala", "source_location": "L6"}], "edges": [{"source": "squaretest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/api/src/test/scala/de/nowchess/api/board/SquareTest.scala", "source_location": "L3", "weight": 1.0}, {"source": "squaretest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/api/src/test/scala/de/nowchess/api/board/SquareTest.scala", "source_location": "L4", "weight": 1.0}, {"source": "squaretest", "target": "squaretest_squaretest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/api/src/test/scala/de/nowchess/api/board/SquareTest.scala", "source_location": "L6", "weight": 1.0}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "guiobserver", "label": "GUIObserver.scala", "file_type": "code", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/gui/GUIObserver.scala", "source_location": "L1"}, {"id": "guiobserver_guiobserver", "label": "GUIObserver", "file_type": "code", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/gui/GUIObserver.scala", "source_location": "L13"}, {"id": "guiobserver_guiobserver_ongameevent", "label": ".onGameEvent()", "file_type": "code", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/gui/GUIObserver.scala", "source_location": "L15"}, {"id": "guiobserver_guiobserver_showalert", "label": ".showAlert()", "file_type": "code", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/gui/GUIObserver.scala", "source_location": "L73"}], "edges": [{"source": "guiobserver", "target": "scalafx", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/gui/GUIObserver.scala", "source_location": "L3", "weight": 1.0}, {"source": "guiobserver", "target": "scalafx", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/gui/GUIObserver.scala", "source_location": "L4", "weight": 1.0}, {"source": "guiobserver", "target": "scalafx", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/gui/GUIObserver.scala", "source_location": "L5", "weight": 1.0}, {"source": "guiobserver", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/gui/GUIObserver.scala", "source_location": "L6", "weight": 1.0}, {"source": "guiobserver", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/gui/GUIObserver.scala", "source_location": "L7", "weight": 1.0}, {"source": "guiobserver", "target": "guiobserver_guiobserver", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/gui/GUIObserver.scala", "source_location": "L13", "weight": 1.0}, {"source": "guiobserver_guiobserver", "target": "guiobserver_guiobserver_ongameevent", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/gui/GUIObserver.scala", "source_location": "L15", "weight": 1.0}, {"source": "guiobserver_guiobserver", "target": "guiobserver_guiobserver_showalert", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/gui/GUIObserver.scala", "source_location": "L73", "weight": 1.0}, {"source": "guiobserver_guiobserver_ongameevent", "target": "guiobserver_guiobserver_showalert", "relation": "calls", "confidence": "EXTRACTED", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/gui/GUIObserver.scala", "source_location": "L31", "weight": 1.0}]}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "gamecontextexport", "label": "GameContextExport.scala", "file_type": "code", "source_file": "modules/io/src/main/scala/de/nowchess/io/GameContextExport.scala", "source_location": "L1"}], "edges": [{"source": "gamecontextexport", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/io/src/main/scala/de/nowchess/io/GameContextExport.scala", "source_location": "L3", "weight": 1.0}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "apiresponsetest", "label": "ApiResponseTest.scala", "file_type": "code", "source_file": "modules/api/src/test/scala/de/nowchess/api/response/ApiResponseTest.scala", "source_location": "L1"}, {"id": "apiresponsetest_apiresponsetest", "label": "ApiResponseTest", "file_type": "code", "source_file": "modules/api/src/test/scala/de/nowchess/api/response/ApiResponseTest.scala", "source_location": "L6"}], "edges": [{"source": "apiresponsetest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/api/src/test/scala/de/nowchess/api/response/ApiResponseTest.scala", "source_location": "L3", "weight": 1.0}, {"source": "apiresponsetest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/api/src/test/scala/de/nowchess/api/response/ApiResponseTest.scala", "source_location": "L4", "weight": 1.0}, {"source": "apiresponsetest", "target": "apiresponsetest_apiresponsetest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/api/src/test/scala/de/nowchess/api/response/ApiResponseTest.scala", "source_location": "L6", "weight": 1.0}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "gameenginewithbottest", "label": "GameEngineWithBotTest.scala", "file_type": "code", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineWithBotTest.scala", "source_location": "L1"}, {"id": "gameenginewithbottest_gameenginewithbottest", "label": "GameEngineWithBotTest", "file_type": "code", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineWithBotTest.scala", "source_location": "L14"}, {"id": "gameenginewithbottest_ongameevent", "label": "onGameEvent()", "file_type": "code", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineWithBotTest.scala", "source_location": "L29"}], "edges": [{"source": "gameenginewithbottest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineWithBotTest.scala", "source_location": "L3", "weight": 1.0}, {"source": "gameenginewithbottest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineWithBotTest.scala", "source_location": "L4", "weight": 1.0}, {"source": "gameenginewithbottest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineWithBotTest.scala", "source_location": "L5", "weight": 1.0}, {"source": "gameenginewithbottest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineWithBotTest.scala", "source_location": "L6", "weight": 1.0}, {"source": "gameenginewithbottest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineWithBotTest.scala", "source_location": "L7", "weight": 1.0}, {"source": "gameenginewithbottest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineWithBotTest.scala", "source_location": "L8", "weight": 1.0}, {"source": "gameenginewithbottest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineWithBotTest.scala", "source_location": "L9", "weight": 1.0}, {"source": "gameenginewithbottest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineWithBotTest.scala", "source_location": "L10", "weight": 1.0}, {"source": "gameenginewithbottest", "target": "scala", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineWithBotTest.scala", "source_location": "L11", "weight": 1.0}, {"source": "gameenginewithbottest", "target": "scala", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineWithBotTest.scala", "source_location": "L12", "weight": 1.0}, {"source": "gameenginewithbottest", "target": "gameenginewithbottest_gameenginewithbottest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineWithBotTest.scala", "source_location": "L14", "weight": 1.0}, {"source": "gameenginewithbottest", "target": "gameenginewithbottest_ongameevent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineWithBotTest.scala", "source_location": "L29", "weight": 1.0}, {"source": "gameenginewithbottest", "target": "gameenginewithbottest_ongameevent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineWithBotTest.scala", "source_location": "L75", "weight": 1.0}, {"source": "gameenginewithbottest", "target": "gameenginewithbottest_ongameevent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineWithBotTest.scala", "source_location": "L99", "weight": 1.0}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "botdifficultytest", "label": "BotDifficultyTest.scala", "file_type": "code", "source_file": "modules/bot/src/test/scala/de/nowchess/bot/BotDifficultyTest.scala", "source_location": "L1"}, {"id": "botdifficultytest_botdifficultytest", "label": "BotDifficultyTest", "file_type": "code", "source_file": "modules/bot/src/test/scala/de/nowchess/bot/BotDifficultyTest.scala", "source_location": "L6"}], "edges": [{"source": "botdifficultytest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/test/scala/de/nowchess/bot/BotDifficultyTest.scala", "source_location": "L3", "weight": 1.0}, {"source": "botdifficultytest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/test/scala/de/nowchess/bot/BotDifficultyTest.scala", "source_location": "L4", "weight": 1.0}, {"source": "botdifficultytest", "target": "botdifficultytest_botdifficultytest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/bot/src/test/scala/de/nowchess/bot/BotDifficultyTest.scala", "source_location": "L6", "weight": 1.0}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "gameengineloadgametest", "label": "GameEngineLoadGameTest.scala", "file_type": "code", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineLoadGameTest.scala", "source_location": "L1"}, {"id": "gameengineloadgametest_gameengineloadgametest", "label": "GameEngineLoadGameTest", "file_type": "code", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineLoadGameTest.scala", "source_location": "L14"}, {"id": "gameengineloadgametest_mockobserver", "label": "MockObserver", "file_type": "code", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineLoadGameTest.scala", "source_location": "L40"}, {"id": "gameengineloadgametest_mockobserver_ongameevent", "label": ".onGameEvent()", "file_type": "code", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineLoadGameTest.scala", "source_location": "L42"}], "edges": [{"source": "gameengineloadgametest", "target": "scala", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineLoadGameTest.scala", "source_location": "L3", "weight": 1.0}, {"source": "gameengineloadgametest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineLoadGameTest.scala", "source_location": "L4", "weight": 1.0}, {"source": "gameengineloadgametest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineLoadGameTest.scala", "source_location": "L5", "weight": 1.0}, {"source": "gameengineloadgametest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineLoadGameTest.scala", "source_location": "L6", "weight": 1.0}, {"source": "gameengineloadgametest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineLoadGameTest.scala", "source_location": "L7", "weight": 1.0}, {"source": "gameengineloadgametest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineLoadGameTest.scala", "source_location": "L8", "weight": 1.0}, {"source": "gameengineloadgametest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineLoadGameTest.scala", "source_location": "L9", "weight": 1.0}, {"source": "gameengineloadgametest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineLoadGameTest.scala", "source_location": "L10", "weight": 1.0}, {"source": "gameengineloadgametest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineLoadGameTest.scala", "source_location": "L11", "weight": 1.0}, {"source": "gameengineloadgametest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineLoadGameTest.scala", "source_location": "L12", "weight": 1.0}, {"source": "gameengineloadgametest", "target": "gameengineloadgametest_gameengineloadgametest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineLoadGameTest.scala", "source_location": "L14", "weight": 1.0}, {"source": "gameengineloadgametest", "target": "gameengineloadgametest_mockobserver", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineLoadGameTest.scala", "source_location": "L40", "weight": 1.0}, {"source": "gameengineloadgametest_mockobserver", "target": "gameengineloadgametest_mockobserver_ongameevent", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineLoadGameTest.scala", "source_location": "L42", "weight": 1.0}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "gamecontextimport", "label": "GameContextImport.scala", "file_type": "code", "source_file": "modules/io/src/main/scala/de/nowchess/io/GameContextImport.scala", "source_location": "L1"}], "edges": [{"source": "gamecontextimport", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/io/src/main/scala/de/nowchess/io/GameContextImport.scala", "source_location": "L3", "weight": 1.0}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "settings_gradle", "label": "settings.gradle.kts", "file_type": "code", "source_file": "settings.gradle.kts", "source_location": "L1"}], "edges": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "generate", "label": "generate.py", "file_type": "code", "source_file": "modules/bot/python/src/generate.py", "source_location": "L1"}, {"id": "generate_worker_generate_games", "label": "_worker_generate_games()", "file_type": "code", "source_file": "modules/bot/python/src/generate.py", "source_location": "L13"}, {"id": "generate_play_random_game_and_collect_positions", "label": "play_random_game_and_collect_positions()", "file_type": "code", "source_file": "modules/bot/python/src/generate.py", "source_location": "L64"}, {"id": "generate_rationale_14", "label": "Generate games for one worker. Returns: list of FENs generated by t", "file_type": "rationale", "source_file": "modules/bot/python/src/generate.py", "source_location": "L14"}, {"id": "generate_rationale_72", "label": "Generate positions using multiprocessing with multiple workers. Args:", "file_type": "rationale", "source_file": "modules/bot/python/src/generate.py", "source_location": "L72"}], "edges": [{"source": "generate", "target": "chess", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/python/src/generate.py", "source_location": "L4", "weight": 1.0}, {"source": "generate", "target": "random", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/python/src/generate.py", "source_location": "L5", "weight": 1.0}, {"source": "generate", "target": "sys", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/python/src/generate.py", "source_location": "L6", "weight": 1.0}, {"source": "generate", "target": "pathlib", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "modules/bot/python/src/generate.py", "source_location": "L7", "weight": 1.0}, {"source": "generate", "target": "tqdm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "modules/bot/python/src/generate.py", "source_location": "L8", "weight": 1.0}, {"source": "generate", "target": "multiprocessing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "modules/bot/python/src/generate.py", "source_location": "L9", "weight": 1.0}, {"source": "generate", "target": "datetime", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "modules/bot/python/src/generate.py", "source_location": "L10", "weight": 1.0}, {"source": "generate", "target": "time", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/python/src/generate.py", "source_location": "L11", "weight": 1.0}, {"source": "generate", "target": "generate_worker_generate_games", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/bot/python/src/generate.py", "source_location": "L13", "weight": 1.0}, {"source": "generate", "target": "generate_play_random_game_and_collect_positions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/bot/python/src/generate.py", "source_location": "L64", "weight": 1.0}, {"source": "generate", "target": "argparse", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/python/src/generate.py", "source_location": "L144", "weight": 1.0}, {"source": "generate_rationale_14", "target": "generate_worker_generate_games", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "modules/bot/python/src/generate.py", "source_location": "L14", "weight": 1.0}, {"source": "generate_rationale_72", "target": "generate_play_random_game_and_collect_positions", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "modules/bot/python/src/generate.py", "source_location": "L72", "weight": 1.0}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "config", "label": "Config.scala", "file_type": "code", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/Config.scala", "source_location": "L1"}, {"id": "config_config", "label": "Config", "file_type": "code", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/Config.scala", "source_location": "L3"}], "edges": [{"source": "config", "target": "config_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/Config.scala", "source_location": "L3", "weight": 1.0}]}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "pieceunicode", "label": "PieceUnicode.scala", "file_type": "code", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/utils/PieceUnicode.scala", "source_location": "L1"}, {"id": "pieceunicode_unicode", "label": "unicode()", "file_type": "code", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/utils/PieceUnicode.scala", "source_location": "L6"}], "edges": [{"source": "pieceunicode", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/utils/PieceUnicode.scala", "source_location": "L3", "weight": 1.0}, {"source": "pieceunicode", "target": "pieceunicode_unicode", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/utils/PieceUnicode.scala", "source_location": "L6", "weight": 1.0}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "test_counter", "label": "test_counter.py", "file_type": "code", "source_file": "jacoco-reporter/test_counter.py", "source_location": "L1"}], "edges": [{"source": "test_counter", "target": "glob", "relation": "imports", "confidence": "EXTRACTED", "source_file": "jacoco-reporter/test_counter.py", "source_location": "L1", "weight": 1.0}, {"source": "test_counter", "target": "re", "relation": "imports", "confidence": "EXTRACTED", "source_file": "jacoco-reporter/test_counter.py", "source_location": "L1", "weight": 1.0}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "gamecontext", "label": "GameContext.scala", "file_type": "code", "source_file": "modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala", "source_location": "L1"}, {"id": "gamecontext_gamecontext", "label": "GameContext", "file_type": "code", "source_file": "modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala", "source_location": "L9"}, {"id": "gamecontext_gamecontext_withboard", "label": ".withBoard()", "file_type": "code", "source_file": "modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala", "source_location": "L18"}, {"id": "gamecontext_gamecontext_withturn", "label": ".withTurn()", "file_type": "code", "source_file": "modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala", "source_location": "L21"}, {"id": "gamecontext_gamecontext_withcastlingrights", "label": ".withCastlingRights()", "file_type": "code", "source_file": "modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala", "source_location": "L24"}, {"id": "gamecontext_gamecontext_withenpassantsquare", "label": ".withEnPassantSquare()", "file_type": "code", "source_file": "modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala", "source_location": "L27"}, {"id": "gamecontext_gamecontext_withhalfmoveclock", "label": ".withHalfMoveClock()", "file_type": "code", "source_file": "modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala", "source_location": "L30"}, {"id": "gamecontext_gamecontext_withmove", "label": ".withMove()", "file_type": "code", "source_file": "modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala", "source_location": "L33"}, {"id": "gamecontext_gamecontext_initial", "label": ".initial()", "file_type": "code", "source_file": "modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala", "source_location": "L37"}], "edges": [{"source": "gamecontext", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala", "source_location": "L3", "weight": 1.0}, {"source": "gamecontext", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala", "source_location": "L4", "weight": 1.0}, {"source": "gamecontext", "target": "gamecontext_gamecontext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala", "source_location": "L9", "weight": 1.0}, {"source": "gamecontext_gamecontext", "target": "gamecontext_gamecontext_withboard", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala", "source_location": "L18", "weight": 1.0}, {"source": "gamecontext_gamecontext", "target": "gamecontext_gamecontext_withturn", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala", "source_location": "L21", "weight": 1.0}, {"source": "gamecontext_gamecontext", "target": "gamecontext_gamecontext_withcastlingrights", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala", "source_location": "L24", "weight": 1.0}, {"source": "gamecontext_gamecontext", "target": "gamecontext_gamecontext_withenpassantsquare", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala", "source_location": "L27", "weight": 1.0}, {"source": "gamecontext_gamecontext", "target": "gamecontext_gamecontext_withhalfmoveclock", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala", "source_location": "L30", "weight": 1.0}, {"source": "gamecontext_gamecontext", "target": "gamecontext_gamecontext_withmove", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala", "source_location": "L33", "weight": 1.0}, {"source": "gamecontext", "target": "gamecontext_gamecontext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala", "source_location": "L35", "weight": 1.0}, {"source": "gamecontext_gamecontext", "target": "gamecontext_gamecontext_initial", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala", "source_location": "L37", "weight": 1.0}, {"source": "gamecontext_gamecontext_initial", "target": "gamecontext_gamecontext", "relation": "calls", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala", "source_location": "L37", "weight": 1.0}]}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "chessgui", "label": "ChessGUI.scala", "file_type": "code", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/gui/ChessGUI.scala", "source_location": "L1"}, {"id": "chessgui_chessguiapp", "label": "ChessGUIApp", "file_type": "code", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/gui/ChessGUI.scala", "source_location": "L14"}, {"id": "chessgui_chessguiapp_start", "label": ".start()", "file_type": "code", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/gui/ChessGUI.scala", "source_location": "L16"}, {"id": "chessgui_chessguilauncher", "label": "ChessGUILauncher", "file_type": "code", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/gui/ChessGUI.scala", "source_location": "L51"}, {"id": "chessgui_chessguilauncher_getengine", "label": ".getEngine()", "file_type": "code", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/gui/ChessGUI.scala", "source_location": "L54"}, {"id": "chessgui_chessguilauncher_launch", "label": ".launch()", "file_type": "code", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/gui/ChessGUI.scala", "source_location": "L56"}], "edges": [{"source": "chessgui", "target": "javafx", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/gui/ChessGUI.scala", "source_location": "L3", "weight": 1.0}, {"source": "chessgui", "target": "javafx", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/gui/ChessGUI.scala", "source_location": "L4", "weight": 1.0}, {"source": "chessgui", "target": "scalafx", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/gui/ChessGUI.scala", "source_location": "L5", "weight": 1.0}, {"source": "chessgui", "target": "scalafx", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/gui/ChessGUI.scala", "source_location": "L6", "weight": 1.0}, {"source": "chessgui", "target": "scalafx", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/gui/ChessGUI.scala", "source_location": "L7", "weight": 1.0}, {"source": "chessgui", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/gui/ChessGUI.scala", "source_location": "L8", "weight": 1.0}, {"source": "chessgui", "target": "chessgui_chessguiapp", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/gui/ChessGUI.scala", "source_location": "L14", "weight": 1.0}, {"source": "chessgui_chessguiapp", "target": "chessgui_chessguiapp_start", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/gui/ChessGUI.scala", "source_location": "L16", "weight": 1.0}, {"source": "chessgui", "target": "chessgui_chessguilauncher", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/gui/ChessGUI.scala", "source_location": "L51", "weight": 1.0}, {"source": "chessgui_chessguilauncher", "target": "chessgui_chessguilauncher_getengine", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/gui/ChessGUI.scala", "source_location": "L54", "weight": 1.0}, {"source": "chessgui_chessguilauncher", "target": "chessgui_chessguilauncher_launch", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/gui/ChessGUI.scala", "source_location": "L56", "weight": 1.0}, {"source": "chessgui_chessguilauncher_launch", "target": "chessgui_chessguiapp_start", "relation": "calls", "confidence": "EXTRACTED", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/gui/ChessGUI.scala", "source_location": "L63", "weight": 1.0}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "nnue", "label": "NNUE.scala", "file_type": "code", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala", "source_location": "L1"}, {"id": "nnue_nnue", "label": "NNUE", "file_type": "code", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala", "source_location": "L8"}, {"id": "nnue_nnue_loadweights", "label": ".loadWeights()", "file_type": "code", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala", "source_location": "L12"}, {"id": "nnue_nnue_readtensor", "label": ".readTensor()", "file_type": "code", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala", "source_location": "L46"}, {"id": "nnue_nnue_positiontofeatures", "label": ".positionToFeatures()", "file_type": "code", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala", "source_location": "L72"}, {"id": "nnue_nnue_evaluate", "label": ".evaluate()", "file_type": "code", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala", "source_location": "L98"}, {"id": "nnue_nnue_benchmark", "label": ".benchmark()", "file_type": "code", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala", "source_location": "L148"}], "edges": [{"source": "nnue", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala", "source_location": "L3", "weight": 1.0}, {"source": "nnue", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala", "source_location": "L4", "weight": 1.0}, {"source": "nnue", "target": "java", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala", "source_location": "L5", "weight": 1.0}, {"source": "nnue", "target": "java", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala", "source_location": "L6", "weight": 1.0}, {"source": "nnue", "target": "nnue_nnue", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala", "source_location": "L8", "weight": 1.0}, {"source": "nnue_nnue", "target": "nnue_nnue_loadweights", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala", "source_location": "L12", "weight": 1.0}, {"source": "nnue_nnue", "target": "nnue_nnue_readtensor", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala", "source_location": "L46", "weight": 1.0}, {"source": "nnue_nnue", "target": "nnue_nnue_positiontofeatures", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala", "source_location": "L72", "weight": 1.0}, {"source": "nnue_nnue", "target": "nnue_nnue_evaluate", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala", "source_location": "L98", "weight": 1.0}, {"source": "nnue_nnue", "target": "nnue_nnue_benchmark", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala", "source_location": "L148", "weight": 1.0}, {"source": "nnue_nnue_loadweights", "target": "nnue_nnue_readtensor", "relation": "calls", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala", "source_location": "L32", "weight": 1.0}, {"source": "nnue_nnue_evaluate", "target": "nnue_nnue_positiontofeatures", "relation": "calls", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala", "source_location": "L99", "weight": 1.0}, {"source": "nnue_nnue_benchmark", "target": "nnue_nnue_evaluate", "relation": "calls", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala", "source_location": "L154", "weight": 1.0}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "pgnexportertest", "label": "PgnExporterTest.scala", "file_type": "code", "source_file": "modules/io/src/test/scala/de/nowchess/io/pgn/PgnExporterTest.scala", "source_location": "L1"}, {"id": "pgnexportertest_pgnexportertest", "label": "PgnExporterTest", "file_type": "code", "source_file": "modules/io/src/test/scala/de/nowchess/io/pgn/PgnExporterTest.scala", "source_location": "L9"}, {"id": "pgnexportertest_pgnexportertest_sq", "label": ".sq()", "file_type": "code", "source_file": "modules/io/src/test/scala/de/nowchess/io/pgn/PgnExporterTest.scala", "source_location": "L66"}], "edges": [{"source": "pgnexportertest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/io/src/test/scala/de/nowchess/io/pgn/PgnExporterTest.scala", "source_location": "L3", "weight": 1.0}, {"source": "pgnexportertest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/io/src/test/scala/de/nowchess/io/pgn/PgnExporterTest.scala", "source_location": "L4", "weight": 1.0}, {"source": "pgnexportertest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/io/src/test/scala/de/nowchess/io/pgn/PgnExporterTest.scala", "source_location": "L5", "weight": 1.0}, {"source": "pgnexportertest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/io/src/test/scala/de/nowchess/io/pgn/PgnExporterTest.scala", "source_location": "L6", "weight": 1.0}, {"source": "pgnexportertest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/io/src/test/scala/de/nowchess/io/pgn/PgnExporterTest.scala", "source_location": "L7", "weight": 1.0}, {"source": "pgnexportertest", "target": "pgnexportertest_pgnexportertest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/io/src/test/scala/de/nowchess/io/pgn/PgnExporterTest.scala", "source_location": "L9", "weight": 1.0}, {"source": "pgnexportertest_pgnexportertest", "target": "pgnexportertest_pgnexportertest_sq", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/io/src/test/scala/de/nowchess/io/pgn/PgnExporterTest.scala", "source_location": "L66", "weight": 1.0}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "test_counter", "label": "test_counter.py", "file_type": "code", "source_file": "jacoco-reporter/test_counter.py", "source_location": "L1"}], "edges": [{"source": "test_counter", "target": "glob", "relation": "imports", "confidence": "EXTRACTED", "source_file": "jacoco-reporter/test_counter.py", "source_location": "L1", "weight": 1.0}, {"source": "test_counter", "target": "re", "relation": "imports", "confidence": "EXTRACTED", "source_file": "jacoco-reporter/test_counter.py", "source_location": "L1", "weight": 1.0}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "gameenginespecialmovestest", "label": "GameEngineSpecialMovesTest.scala", "file_type": "code", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineSpecialMovesTest.scala", "source_location": "L1"}, {"id": "gameenginespecialmovestest_gameenginespecialmovestest", "label": "GameEngineSpecialMovesTest", "file_type": "code", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineSpecialMovesTest.scala", "source_location": "L9"}], "edges": [{"source": "gameenginespecialmovestest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineSpecialMovesTest.scala", "source_location": "L3", "weight": 1.0}, {"source": "gameenginespecialmovestest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineSpecialMovesTest.scala", "source_location": "L4", "weight": 1.0}, {"source": "gameenginespecialmovestest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineSpecialMovesTest.scala", "source_location": "L5", "weight": 1.0}, {"source": "gameenginespecialmovestest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineSpecialMovesTest.scala", "source_location": "L6", "weight": 1.0}, {"source": "gameenginespecialmovestest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineSpecialMovesTest.scala", "source_location": "L7", "weight": 1.0}, {"source": "gameenginespecialmovestest", "target": "gameenginespecialmovestest_gameenginespecialmovestest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineSpecialMovesTest.scala", "source_location": "L9", "weight": 1.0}]}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "build_gradle", "label": "build.gradle.kts", "file_type": "code", "source_file": "modules/core/build.gradle.kts", "source_location": "L1"}], "edges": []}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "build_gradle", "label": "build.gradle.kts", "file_type": "code", "source_file": "modules/core/build.gradle.kts", "source_location": "L1"}], "edges": []}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "label", "label": "label.py", "file_type": "code", "source_file": "modules/bot/python/src/label.py", "source_location": "L1"}, {"id": "label_normalize_evaluation", "label": "normalize_evaluation()", "file_type": "code", "source_file": "modules/bot/python/src/label.py", "source_location": "L14"}, {"id": "label_evaluate_fen_batch", "label": "_evaluate_fen_batch()", "file_type": "code", "source_file": "modules/bot/python/src/label.py", "source_location": "L32"}, {"id": "label_label_positions_with_stockfish", "label": "label_positions_with_stockfish()", "file_type": "code", "source_file": "modules/bot/python/src/label.py", "source_location": "L82"}, {"id": "label_rationale_15", "label": "Normalize centipawn evaluation to a bounded range. Args: cp_value:", "file_type": "rationale", "source_file": "modules/bot/python/src/label.py", "source_location": "L15"}, {"id": "label_rationale_33", "label": "Worker function to evaluate a batch of FENs with Stockfish threading. Args:", "file_type": "rationale", "source_file": "modules/bot/python/src/label.py", "source_location": "L33"}, {"id": "label_rationale_83", "label": "Read positions and label them with Stockfish evaluations. Args: pos", "file_type": "rationale", "source_file": "modules/bot/python/src/label.py", "source_location": "L83"}], "edges": [{"source": "label", "target": "json", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/python/src/label.py", "source_location": "L4", "weight": 1.0}, {"source": "label", "target": "chess_engine", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/python/src/label.py", "source_location": "L5", "weight": 1.0}, {"source": "label", "target": "sys", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/python/src/label.py", "source_location": "L6", "weight": 1.0}, {"source": "label", "target": "os", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/python/src/label.py", "source_location": "L7", "weight": 1.0}, {"source": "label", "target": "numpy", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/python/src/label.py", "source_location": "L8", "weight": 1.0}, {"source": "label", "target": "pathlib", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "modules/bot/python/src/label.py", "source_location": "L9", "weight": 1.0}, {"source": "label", "target": "tqdm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "modules/bot/python/src/label.py", "source_location": "L10", "weight": 1.0}, {"source": "label", "target": "multiprocessing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "modules/bot/python/src/label.py", "source_location": "L11", "weight": 1.0}, {"source": "label", "target": "functools", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "modules/bot/python/src/label.py", "source_location": "L12", "weight": 1.0}, {"source": "label", "target": "label_normalize_evaluation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/bot/python/src/label.py", "source_location": "L14", "weight": 1.0}, {"source": "label", "target": "label_evaluate_fen_batch", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/bot/python/src/label.py", "source_location": "L32", "weight": 1.0}, {"source": "label", "target": "label_label_positions_with_stockfish", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/bot/python/src/label.py", "source_location": "L82", "weight": 1.0}, {"source": "label", "target": "argparse", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/python/src/label.py", "source_location": "L279", "weight": 1.0}, {"source": "label_evaluate_fen_batch", "target": "label_normalize_evaluation", "relation": "calls", "confidence": "EXTRACTED", "source_file": "modules/bot/python/src/label.py", "source_location": "L70", "weight": 1.0}, {"source": "label_rationale_15", "target": "label_normalize_evaluation", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "modules/bot/python/src/label.py", "source_location": "L15", "weight": 1.0}, {"source": "label_rationale_33", "target": "label_evaluate_fen_batch", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "modules/bot/python/src/label.py", "source_location": "L33", "weight": 1.0}, {"source": "label_rationale_83", "target": "label_label_positions_with_stockfish", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "modules/bot/python/src/label.py", "source_location": "L83", "weight": 1.0}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "movecommandtest", "label": "MoveCommandTest.scala", "file_type": "code", "source_file": "modules/core/src/test/scala/de/nowchess/chess/command/MoveCommandTest.scala", "source_location": "L1"}, {"id": "movecommandtest_movecommandtest", "label": "MoveCommandTest", "file_type": "code", "source_file": "modules/core/src/test/scala/de/nowchess/chess/command/MoveCommandTest.scala", "source_location": "L8"}, {"id": "movecommandtest_movecommandtest_sq", "label": ".sq()", "file_type": "code", "source_file": "modules/core/src/test/scala/de/nowchess/chess/command/MoveCommandTest.scala", "source_location": "L10"}], "edges": [{"source": "movecommandtest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/command/MoveCommandTest.scala", "source_location": "L3", "weight": 1.0}, {"source": "movecommandtest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/command/MoveCommandTest.scala", "source_location": "L4", "weight": 1.0}, {"source": "movecommandtest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/command/MoveCommandTest.scala", "source_location": "L5", "weight": 1.0}, {"source": "movecommandtest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/command/MoveCommandTest.scala", "source_location": "L6", "weight": 1.0}, {"source": "movecommandtest", "target": "movecommandtest_movecommandtest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/command/MoveCommandTest.scala", "source_location": "L8", "weight": 1.0}, {"source": "movecommandtest_movecommandtest", "target": "movecommandtest_movecommandtest_sq", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/command/MoveCommandTest.scala", "source_location": "L10", "weight": 1.0}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "polyglothashtest", "label": "PolyglotHashTest.scala", "file_type": "code", "source_file": "modules/bot/src/test/scala/de/nowchess/bot/PolyglotHashTest.scala", "source_location": "L1"}, {"id": "polyglothashtest_polyglothashtest", "label": "PolyglotHashTest", "file_type": "code", "source_file": "modules/bot/src/test/scala/de/nowchess/bot/PolyglotHashTest.scala", "source_location": "L10"}], "edges": [{"source": "polyglothashtest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/test/scala/de/nowchess/bot/PolyglotHashTest.scala", "source_location": "L3", "weight": 1.0}, {"source": "polyglothashtest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/test/scala/de/nowchess/bot/PolyglotHashTest.scala", "source_location": "L4", "weight": 1.0}, {"source": "polyglothashtest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/test/scala/de/nowchess/bot/PolyglotHashTest.scala", "source_location": "L5", "weight": 1.0}, {"source": "polyglothashtest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/test/scala/de/nowchess/bot/PolyglotHashTest.scala", "source_location": "L6", "weight": 1.0}, {"source": "polyglothashtest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/test/scala/de/nowchess/bot/PolyglotHashTest.scala", "source_location": "L7", "weight": 1.0}, {"source": "polyglothashtest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/test/scala/de/nowchess/bot/PolyglotHashTest.scala", "source_location": "L8", "weight": 1.0}, {"source": "polyglothashtest", "target": "polyglothashtest_polyglothashtest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/bot/src/test/scala/de/nowchess/bot/PolyglotHashTest.scala", "source_location": "L10", "weight": 1.0}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "piecetest", "label": "PieceTest.scala", "file_type": "code", "source_file": "modules/api/src/test/scala/de/nowchess/api/board/PieceTest.scala", "source_location": "L1"}, {"id": "piecetest_piecetest", "label": "PieceTest", "file_type": "code", "source_file": "modules/api/src/test/scala/de/nowchess/api/board/PieceTest.scala", "source_location": "L6"}], "edges": [{"source": "piecetest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/api/src/test/scala/de/nowchess/api/board/PieceTest.scala", "source_location": "L3", "weight": 1.0}, {"source": "piecetest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/api/src/test/scala/de/nowchess/api/board/PieceTest.scala", "source_location": "L4", "weight": 1.0}, {"source": "piecetest", "target": "piecetest_piecetest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/api/src/test/scala/de/nowchess/api/board/PieceTest.scala", "source_location": "L6", "weight": 1.0}]}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "main", "label": "Main.scala", "file_type": "code", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/Main.scala", "source_location": "L1"}, {"id": "main_main", "label": "Main", "file_type": "code", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/Main.scala", "source_location": "L14"}, {"id": "main_main_main", "label": ".main()", "file_type": "code", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/Main.scala", "source_location": "L15"}], "edges": [{"source": "main", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/Main.scala", "source_location": "L3", "weight": 1.0}, {"source": "main", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/Main.scala", "source_location": "L4", "weight": 1.0}, {"source": "main", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/Main.scala", "source_location": "L5", "weight": 1.0}, {"source": "main", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/Main.scala", "source_location": "L6", "weight": 1.0}, {"source": "main", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/Main.scala", "source_location": "L7", "weight": 1.0}, {"source": "main", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/Main.scala", "source_location": "L8", "weight": 1.0}, {"source": "main", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/Main.scala", "source_location": "L9", "weight": 1.0}, {"source": "main", "target": "main_main", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/Main.scala", "source_location": "L14", "weight": 1.0}, {"source": "main_main", "target": "main_main_main", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/Main.scala", "source_location": "L15", "weight": 1.0}]}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "ruleset", "label": "RuleSet.scala", "file_type": "code", "source_file": "modules/rule/src/main/scala/de/nowchess/rules/RuleSet.scala", "source_location": "L1"}], "edges": [{"source": "ruleset", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/rule/src/main/scala/de/nowchess/rules/RuleSet.scala", "source_location": "L3", "weight": 1.0}, {"source": "ruleset", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/rule/src/main/scala/de/nowchess/rules/RuleSet.scala", "source_location": "L4", "weight": 1.0}, {"source": "ruleset", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/rule/src/main/scala/de/nowchess/rules/RuleSet.scala", "source_location": "L5", "weight": 1.0}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "gameenginescenariotest", "label": "GameEngineScenarioTest.scala", "file_type": "code", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineScenarioTest.scala", "source_location": "L1"}, {"id": "gameenginescenariotest_gameenginescenariotest", "label": "GameEngineScenarioTest", "file_type": "code", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineScenarioTest.scala", "source_location": "L11"}], "edges": [{"source": "gameenginescenariotest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineScenarioTest.scala", "source_location": "L3", "weight": 1.0}, {"source": "gameenginescenariotest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineScenarioTest.scala", "source_location": "L4", "weight": 1.0}, {"source": "gameenginescenariotest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineScenarioTest.scala", "source_location": "L5", "weight": 1.0}, {"source": "gameenginescenariotest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineScenarioTest.scala", "source_location": "L6", "weight": 1.0}, {"source": "gameenginescenariotest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineScenarioTest.scala", "source_location": "L7", "weight": 1.0}, {"source": "gameenginescenariotest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineScenarioTest.scala", "source_location": "L8", "weight": 1.0}, {"source": "gameenginescenariotest", "target": "scala", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineScenarioTest.scala", "source_location": "L9", "weight": 1.0}, {"source": "gameenginescenariotest", "target": "gameenginescenariotest_gameenginescenariotest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineScenarioTest.scala", "source_location": "L11", "weight": 1.0}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "pgnvalidatortest", "label": "PgnValidatorTest.scala", "file_type": "code", "source_file": "modules/io/src/test/scala/de/nowchess/io/pgn/PgnValidatorTest.scala", "source_location": "L1"}, {"id": "pgnvalidatortest_pgnvalidatortest", "label": "PgnValidatorTest", "file_type": "code", "source_file": "modules/io/src/test/scala/de/nowchess/io/pgn/PgnValidatorTest.scala", "source_location": "L8"}], "edges": [{"source": "pgnvalidatortest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/io/src/test/scala/de/nowchess/io/pgn/PgnValidatorTest.scala", "source_location": "L3", "weight": 1.0}, {"source": "pgnvalidatortest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/io/src/test/scala/de/nowchess/io/pgn/PgnValidatorTest.scala", "source_location": "L4", "weight": 1.0}, {"source": "pgnvalidatortest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/io/src/test/scala/de/nowchess/io/pgn/PgnValidatorTest.scala", "source_location": "L5", "weight": 1.0}, {"source": "pgnvalidatortest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/io/src/test/scala/de/nowchess/io/pgn/PgnValidatorTest.scala", "source_location": "L6", "weight": 1.0}, {"source": "pgnvalidatortest", "target": "pgnvalidatortest_pgnvalidatortest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/io/src/test/scala/de/nowchess/io/pgn/PgnValidatorTest.scala", "source_location": "L8", "weight": 1.0}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "fenexportertest", "label": "FenExporterTest.scala", "file_type": "code", "source_file": "modules/io/src/test/scala/de/nowchess/io/fen/FenExporterTest.scala", "source_location": "L1"}, {"id": "fenexportertest_fenexportertest", "label": "FenExporterTest", "file_type": "code", "source_file": "modules/io/src/test/scala/de/nowchess/io/fen/FenExporterTest.scala", "source_location": "L9"}, {"id": "fenexportertest_fenexportertest_context", "label": ".context()", "file_type": "code", "source_file": "modules/io/src/test/scala/de/nowchess/io/fen/FenExporterTest.scala", "source_location": "L11"}], "edges": [{"source": "fenexportertest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/io/src/test/scala/de/nowchess/io/fen/FenExporterTest.scala", "source_location": "L3", "weight": 1.0}, {"source": "fenexportertest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/io/src/test/scala/de/nowchess/io/fen/FenExporterTest.scala", "source_location": "L4", "weight": 1.0}, {"source": "fenexportertest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/io/src/test/scala/de/nowchess/io/fen/FenExporterTest.scala", "source_location": "L5", "weight": 1.0}, {"source": "fenexportertest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/io/src/test/scala/de/nowchess/io/fen/FenExporterTest.scala", "source_location": "L6", "weight": 1.0}, {"source": "fenexportertest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/io/src/test/scala/de/nowchess/io/fen/FenExporterTest.scala", "source_location": "L7", "weight": 1.0}, {"source": "fenexportertest", "target": "fenexportertest_fenexportertest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/io/src/test/scala/de/nowchess/io/fen/FenExporterTest.scala", "source_location": "L9", "weight": 1.0}, {"source": "fenexportertest_fenexportertest", "target": "fenexportertest_fenexportertest_context", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/io/src/test/scala/de/nowchess/io/fen/FenExporterTest.scala", "source_location": "L11", "weight": 1.0}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "weights", "label": "Weights.scala", "file_type": "code", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/ai/Weights.scala", "source_location": "L1"}], "edges": [{"source": "weights", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/ai/Weights.scala", "source_location": "L3", "weight": 1.0}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "board", "label": "Board.scala", "file_type": "code", "source_file": "modules/api/src/main/scala/de/nowchess/api/board/Board.scala", "source_location": "L1"}, {"id": "board_board", "label": "Board", "file_type": "code", "source_file": "modules/api/src/main/scala/de/nowchess/api/board/Board.scala", "source_location": "L5"}, {"id": "board_board_apply", "label": ".apply()", "file_type": "code", "source_file": "modules/api/src/main/scala/de/nowchess/api/board/Board.scala", "source_location": "L7"}, {"id": "board_pieceat", "label": "pieceAt()", "file_type": "code", "source_file": "modules/api/src/main/scala/de/nowchess/api/board/Board.scala", "source_location": "L10"}, {"id": "board_updated", "label": "updated()", "file_type": "code", "source_file": "modules/api/src/main/scala/de/nowchess/api/board/Board.scala", "source_location": "L11"}, {"id": "board_removed", "label": "removed()", "file_type": "code", "source_file": "modules/api/src/main/scala/de/nowchess/api/board/Board.scala", "source_location": "L12"}, {"id": "board_withmove", "label": "withMove()", "file_type": "code", "source_file": "modules/api/src/main/scala/de/nowchess/api/board/Board.scala", "source_location": "L13"}, {"id": "board_applymove", "label": "applyMove()", "file_type": "code", "source_file": "modules/api/src/main/scala/de/nowchess/api/board/Board.scala", "source_location": "L17"}, {"id": "board_pieces", "label": "pieces()", "file_type": "code", "source_file": "modules/api/src/main/scala/de/nowchess/api/board/Board.scala", "source_location": "L20"}], "edges": [{"source": "board", "target": "board_board", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/board/Board.scala", "source_location": "L5", "weight": 1.0}, {"source": "board_board", "target": "board_board_apply", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/board/Board.scala", "source_location": "L7", "weight": 1.0}, {"source": "board", "target": "board_pieceat", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/board/Board.scala", "source_location": "L10", "weight": 1.0}, {"source": "board", "target": "board_updated", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/board/Board.scala", "source_location": "L11", "weight": 1.0}, {"source": "board", "target": "board_removed", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/board/Board.scala", "source_location": "L12", "weight": 1.0}, {"source": "board", "target": "board_withmove", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/board/Board.scala", "source_location": "L13", "weight": 1.0}, {"source": "board", "target": "board_applymove", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/board/Board.scala", "source_location": "L17", "weight": 1.0}, {"source": "board", "target": "board_pieces", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/board/Board.scala", "source_location": "L20", "weight": 1.0}, {"source": "board_withmove", "target": "board_updated", "relation": "calls", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/board/Board.scala", "source_location": "L15", "weight": 1.0}, {"source": "board_withmove", "target": "board_removed", "relation": "calls", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/board/Board.scala", "source_location": "L15", "weight": 1.0}, {"source": "board_applymove", "target": "board_withmove", "relation": "calls", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/board/Board.scala", "source_location": "L18", "weight": 1.0}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "fenparsertest", "label": "FenParserTest.scala", "file_type": "code", "source_file": "modules/io/src/test/scala/de/nowchess/io/fen/FenParserTest.scala", "source_location": "L1"}, {"id": "fenparsertest_fenparsertest", "label": "FenParserTest", "file_type": "code", "source_file": "modules/io/src/test/scala/de/nowchess/io/fen/FenParserTest.scala", "source_location": "L7"}], "edges": [{"source": "fenparsertest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/io/src/test/scala/de/nowchess/io/fen/FenParserTest.scala", "source_location": "L3", "weight": 1.0}, {"source": "fenparsertest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/io/src/test/scala/de/nowchess/io/fen/FenParserTest.scala", "source_location": "L4", "weight": 1.0}, {"source": "fenparsertest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/io/src/test/scala/de/nowchess/io/fen/FenParserTest.scala", "source_location": "L5", "weight": 1.0}, {"source": "fenparsertest", "target": "fenparsertest_fenparsertest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/io/src/test/scala/de/nowchess/io/fen/FenParserTest.scala", "source_location": "L7", "weight": 1.0}]}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "rendererandunicodetest", "label": "RendererAndUnicodeTest.scala", "file_type": "code", "source_file": "modules/ui/src/test/scala/de/nowchess/ui/utils/RendererAndUnicodeTest.scala", "source_location": "L1"}, {"id": "rendererandunicodetest_rendererandunicodetest", "label": "RendererAndUnicodeTest", "file_type": "code", "source_file": "modules/ui/src/test/scala/de/nowchess/ui/utils/RendererAndUnicodeTest.scala", "source_location": "L7"}], "edges": [{"source": "rendererandunicodetest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/ui/src/test/scala/de/nowchess/ui/utils/RendererAndUnicodeTest.scala", "source_location": "L3", "weight": 1.0}, {"source": "rendererandunicodetest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/ui/src/test/scala/de/nowchess/ui/utils/RendererAndUnicodeTest.scala", "source_location": "L4", "weight": 1.0}, {"source": "rendererandunicodetest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/ui/src/test/scala/de/nowchess/ui/utils/RendererAndUnicodeTest.scala", "source_location": "L5", "weight": 1.0}, {"source": "rendererandunicodetest", "target": "rendererandunicodetest_rendererandunicodetest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/ui/src/test/scala/de/nowchess/ui/utils/RendererAndUnicodeTest.scala", "source_location": "L7", "weight": 1.0}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "polyglotbooktest", "label": "PolyglotBookTest.scala", "file_type": "code", "source_file": "modules/bot/src/test/scala/de/nowchess/bot/PolyglotBookTest.scala", "source_location": "L1"}, {"id": "polyglotbooktest_polyglotbooktest", "label": "PolyglotBookTest", "file_type": "code", "source_file": "modules/bot/src/test/scala/de/nowchess/bot/PolyglotBookTest.scala", "source_location": "L16"}], "edges": [{"source": "polyglotbooktest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/test/scala/de/nowchess/bot/PolyglotBookTest.scala", "source_location": "L3", "weight": 1.0}, {"source": "polyglotbooktest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/test/scala/de/nowchess/bot/PolyglotBookTest.scala", "source_location": "L4", "weight": 1.0}, {"source": "polyglotbooktest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/test/scala/de/nowchess/bot/PolyglotBookTest.scala", "source_location": "L5", "weight": 1.0}, {"source": "polyglotbooktest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/test/scala/de/nowchess/bot/PolyglotBookTest.scala", "source_location": "L6", "weight": 1.0}, {"source": "polyglotbooktest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/test/scala/de/nowchess/bot/PolyglotBookTest.scala", "source_location": "L7", "weight": 1.0}, {"source": "polyglotbooktest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/test/scala/de/nowchess/bot/PolyglotBookTest.scala", "source_location": "L8", "weight": 1.0}, {"source": "polyglotbooktest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/test/scala/de/nowchess/bot/PolyglotBookTest.scala", "source_location": "L9", "weight": 1.0}, {"source": "polyglotbooktest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/test/scala/de/nowchess/bot/PolyglotBookTest.scala", "source_location": "L10", "weight": 1.0}, {"source": "polyglotbooktest", "target": "java", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/test/scala/de/nowchess/bot/PolyglotBookTest.scala", "source_location": "L12", "weight": 1.0}, {"source": "polyglotbooktest", "target": "java", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/test/scala/de/nowchess/bot/PolyglotBookTest.scala", "source_location": "L13", "weight": 1.0}, {"source": "polyglotbooktest", "target": "scala", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/test/scala/de/nowchess/bot/PolyglotBookTest.scala", "source_location": "L14", "weight": 1.0}, {"source": "polyglotbooktest", "target": "polyglotbooktest_polyglotbooktest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/bot/src/test/scala/de/nowchess/bot/PolyglotBookTest.scala", "source_location": "L16", "weight": 1.0}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "gameenginenotationtest", "label": "GameEngineNotationTest.scala", "file_type": "code", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineNotationTest.scala", "source_location": "L1"}, {"id": "gameenginenotationtest_gameenginenotationtest", "label": "GameEngineNotationTest", "file_type": "code", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineNotationTest.scala", "source_location": "L17"}, {"id": "gameenginenotationtest_gameenginenotationtest_captureevents", "label": ".captureEvents()", "file_type": "code", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineNotationTest.scala", "source_location": "L19"}], "edges": [{"source": "gameenginenotationtest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineNotationTest.scala", "source_location": "L3", "weight": 1.0}, {"source": "gameenginenotationtest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineNotationTest.scala", "source_location": "L4", "weight": 1.0}, {"source": "gameenginenotationtest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineNotationTest.scala", "source_location": "L5", "weight": 1.0}, {"source": "gameenginenotationtest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineNotationTest.scala", "source_location": "L6", "weight": 1.0}, {"source": "gameenginenotationtest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineNotationTest.scala", "source_location": "L7", "weight": 1.0}, {"source": "gameenginenotationtest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineNotationTest.scala", "source_location": "L8", "weight": 1.0}, {"source": "gameenginenotationtest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineNotationTest.scala", "source_location": "L9", "weight": 1.0}, {"source": "gameenginenotationtest", "target": "gameenginenotationtest_gameenginenotationtest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineNotationTest.scala", "source_location": "L17", "weight": 1.0}, {"source": "gameenginenotationtest_gameenginenotationtest", "target": "gameenginenotationtest_gameenginenotationtest_captureevents", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineNotationTest.scala", "source_location": "L19", "weight": 1.0}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "apiresponse", "label": "ApiResponse.scala", "file_type": "code", "source_file": "modules/api/src/main/scala/de/nowchess/api/response/ApiResponse.scala", "source_location": "L1"}, {"id": "apiresponse_apiresponse", "label": "ApiResponse", "file_type": "code", "source_file": "modules/api/src/main/scala/de/nowchess/api/response/ApiResponse.scala", "source_location": "L13"}, {"id": "apiresponse_success", "label": "Success", "file_type": "code", "source_file": "modules/api/src/main/scala/de/nowchess/api/response/ApiResponse.scala", "source_location": "L15"}, {"id": "apiresponse_failure", "label": "Failure", "file_type": "code", "source_file": "modules/api/src/main/scala/de/nowchess/api/response/ApiResponse.scala", "source_location": "L18"}, {"id": "apiresponse_apiresponse_error", "label": ".error()", "file_type": "code", "source_file": "modules/api/src/main/scala/de/nowchess/api/response/ApiResponse.scala", "source_location": "L21"}, {"id": "apiresponse_apierror", "label": "ApiError", "file_type": "code", "source_file": "modules/api/src/main/scala/de/nowchess/api/response/ApiResponse.scala", "source_location": "L30"}, {"id": "apiresponse_pagination", "label": "Pagination", "file_type": "code", "source_file": "modules/api/src/main/scala/de/nowchess/api/response/ApiResponse.scala", "source_location": "L43"}, {"id": "apiresponse_pagination_totalpages", "label": ".totalPages()", "file_type": "code", "source_file": "modules/api/src/main/scala/de/nowchess/api/response/ApiResponse.scala", "source_location": "L48"}, {"id": "apiresponse_pagedresponse", "label": "PagedResponse", "file_type": "code", "source_file": "modules/api/src/main/scala/de/nowchess/api/response/ApiResponse.scala", "source_location": "L59"}], "edges": [{"source": "apiresponse", "target": "apiresponse_apiresponse", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/response/ApiResponse.scala", "source_location": "L13", "weight": 1.0}, {"source": "apiresponse", "target": "apiresponse_success", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/response/ApiResponse.scala", "source_location": "L15", "weight": 1.0}, {"source": "apiresponse", "target": "apiresponse_failure", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/response/ApiResponse.scala", "source_location": "L18", "weight": 1.0}, {"source": "apiresponse_apiresponse", "target": "apiresponse_apiresponse_error", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/response/ApiResponse.scala", "source_location": "L21", "weight": 1.0}, {"source": "apiresponse", "target": "apiresponse_apierror", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/response/ApiResponse.scala", "source_location": "L30", "weight": 1.0}, {"source": "apiresponse", "target": "apiresponse_pagination", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/response/ApiResponse.scala", "source_location": "L43", "weight": 1.0}, {"source": "apiresponse_pagination", "target": "apiresponse_pagination_totalpages", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/response/ApiResponse.scala", "source_location": "L48", "weight": 1.0}, {"source": "apiresponse", "target": "apiresponse_pagedresponse", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/response/ApiResponse.scala", "source_location": "L59", "weight": 1.0}, {"source": "apiresponse_apiresponse_error", "target": "apiresponse_failure", "relation": "calls", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/response/ApiResponse.scala", "source_location": "L21", "weight": 1.0}]}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "renderer", "label": "Renderer.scala", "file_type": "code", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/utils/Renderer.scala", "source_location": "L1"}, {"id": "renderer_renderer", "label": "Renderer", "file_type": "code", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/utils/Renderer.scala", "source_location": "L5"}, {"id": "renderer_renderer_render", "label": ".render()", "file_type": "code", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/utils/Renderer.scala", "source_location": "L13"}], "edges": [{"source": "renderer", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/utils/Renderer.scala", "source_location": "L3", "weight": 1.0}, {"source": "renderer", "target": "renderer_renderer", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/utils/Renderer.scala", "source_location": "L5", "weight": 1.0}, {"source": "renderer_renderer", "target": "renderer_renderer_render", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/ui/src/main/scala/de/nowchess/ui/utils/Renderer.scala", "source_location": "L13", "weight": 1.0}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "piecetypetest", "label": "PieceTypeTest.scala", "file_type": "code", "source_file": "modules/api/src/test/scala/de/nowchess/api/board/PieceTypeTest.scala", "source_location": "L1"}, {"id": "piecetypetest_piecetypetest", "label": "PieceTypeTest", "file_type": "code", "source_file": "modules/api/src/test/scala/de/nowchess/api/board/PieceTypeTest.scala", "source_location": "L6"}], "edges": [{"source": "piecetypetest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/api/src/test/scala/de/nowchess/api/board/PieceTypeTest.scala", "source_location": "L3", "weight": 1.0}, {"source": "piecetypetest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/api/src/test/scala/de/nowchess/api/board/PieceTypeTest.scala", "source_location": "L4", "weight": 1.0}, {"source": "piecetypetest", "target": "piecetypetest_piecetypetest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/api/src/test/scala/de/nowchess/api/board/PieceTypeTest.scala", "source_location": "L6", "weight": 1.0}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "parser", "label": "Parser.scala", "file_type": "code", "source_file": "modules/core/src/main/scala/de/nowchess/chess/controller/Parser.scala", "source_location": "L1"}, {"id": "parser_parser", "label": "Parser", "file_type": "code", "source_file": "modules/core/src/main/scala/de/nowchess/chess/controller/Parser.scala", "source_location": "L5"}, {"id": "parser_parser_parsemove", "label": ".parseMove()", "file_type": "code", "source_file": "modules/core/src/main/scala/de/nowchess/chess/controller/Parser.scala", "source_location": "L10"}, {"id": "parser_parser_parsesquare", "label": ".parseSquare()", "file_type": "code", "source_file": "modules/core/src/main/scala/de/nowchess/chess/controller/Parser.scala", "source_location": "L18"}], "edges": [{"source": "parser", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/core/src/main/scala/de/nowchess/chess/controller/Parser.scala", "source_location": "L3", "weight": 1.0}, {"source": "parser", "target": "parser_parser", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/core/src/main/scala/de/nowchess/chess/controller/Parser.scala", "source_location": "L5", "weight": 1.0}, {"source": "parser_parser", "target": "parser_parser_parsemove", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/core/src/main/scala/de/nowchess/chess/controller/Parser.scala", "source_location": "L10", "weight": 1.0}, {"source": "parser_parser", "target": "parser_parser_parsesquare", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/core/src/main/scala/de/nowchess/chess/controller/Parser.scala", "source_location": "L18", "weight": 1.0}, {"source": "parser_parser_parsemove", "target": "parser_parser_parsesquare", "relation": "calls", "confidence": "EXTRACTED", "source_file": "modules/core/src/main/scala/de/nowchess/chess/controller/Parser.scala", "source_location": "L14", "weight": 1.0}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "castlingrightstest", "label": "CastlingRightsTest.scala", "file_type": "code", "source_file": "modules/api/src/test/scala/de/nowchess/api/board/CastlingRightsTest.scala", "source_location": "L1"}, {"id": "castlingrightstest_castlingrightstest", "label": "CastlingRightsTest", "file_type": "code", "source_file": "modules/api/src/test/scala/de/nowchess/api/board/CastlingRightsTest.scala", "source_location": "L6"}], "edges": [{"source": "castlingrightstest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/api/src/test/scala/de/nowchess/api/board/CastlingRightsTest.scala", "source_location": "L3", "weight": 1.0}, {"source": "castlingrightstest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/api/src/test/scala/de/nowchess/api/board/CastlingRightsTest.scala", "source_location": "L4", "weight": 1.0}, {"source": "castlingrightstest", "target": "castlingrightstest_castlingrightstest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/api/src/test/scala/de/nowchess/api/board/CastlingRightsTest.scala", "source_location": "L6", "weight": 1.0}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "defaultrulesstatetransitionstest", "label": "DefaultRulesStateTransitionsTest.scala", "file_type": "code", "source_file": "modules/rule/src/test/scala/de/nowchess/rule/DefaultRulesStateTransitionsTest.scala", "source_location": "L1"}, {"id": "defaultrulesstatetransitionstest_defaultrulesstatetransitionstest", "label": "DefaultRulesStateTransitionsTest", "file_type": "code", "source_file": "modules/rule/src/test/scala/de/nowchess/rule/DefaultRulesStateTransitionsTest.scala", "source_location": "L11"}, {"id": "defaultrulesstatetransitionstest_defaultrulesstatetransitionstest_contextfromfen", "label": ".contextFromFen()", "file_type": "code", "source_file": "modules/rule/src/test/scala/de/nowchess/rule/DefaultRulesStateTransitionsTest.scala", "source_location": "L13"}, {"id": "defaultrulesstatetransitionstest_defaultrulesstatetransitionstest_sq", "label": ".sq()", "file_type": "code", "source_file": "modules/rule/src/test/scala/de/nowchess/rule/DefaultRulesStateTransitionsTest.scala", "source_location": "L16"}], "edges": [{"source": "defaultrulesstatetransitionstest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/rule/src/test/scala/de/nowchess/rule/DefaultRulesStateTransitionsTest.scala", "source_location": "L3", "weight": 1.0}, {"source": "defaultrulesstatetransitionstest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/rule/src/test/scala/de/nowchess/rule/DefaultRulesStateTransitionsTest.scala", "source_location": "L4", "weight": 1.0}, {"source": "defaultrulesstatetransitionstest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/rule/src/test/scala/de/nowchess/rule/DefaultRulesStateTransitionsTest.scala", "source_location": "L5", "weight": 1.0}, {"source": "defaultrulesstatetransitionstest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/rule/src/test/scala/de/nowchess/rule/DefaultRulesStateTransitionsTest.scala", "source_location": "L6", "weight": 1.0}, {"source": "defaultrulesstatetransitionstest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/rule/src/test/scala/de/nowchess/rule/DefaultRulesStateTransitionsTest.scala", "source_location": "L7", "weight": 1.0}, {"source": "defaultrulesstatetransitionstest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/rule/src/test/scala/de/nowchess/rule/DefaultRulesStateTransitionsTest.scala", "source_location": "L8", "weight": 1.0}, {"source": "defaultrulesstatetransitionstest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/rule/src/test/scala/de/nowchess/rule/DefaultRulesStateTransitionsTest.scala", "source_location": "L9", "weight": 1.0}, {"source": "defaultrulesstatetransitionstest", "target": "defaultrulesstatetransitionstest_defaultrulesstatetransitionstest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/rule/src/test/scala/de/nowchess/rule/DefaultRulesStateTransitionsTest.scala", "source_location": "L11", "weight": 1.0}, {"source": "defaultrulesstatetransitionstest_defaultrulesstatetransitionstest", "target": "defaultrulesstatetransitionstest_defaultrulesstatetransitionstest_contextfromfen", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/rule/src/test/scala/de/nowchess/rule/DefaultRulesStateTransitionsTest.scala", "source_location": "L13", "weight": 1.0}, {"source": "defaultrulesstatetransitionstest_defaultrulesstatetransitionstest", "target": "defaultrulesstatetransitionstest_defaultrulesstatetransitionstest_sq", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/rule/src/test/scala/de/nowchess/rule/DefaultRulesStateTransitionsTest.scala", "source_location": "L16", "weight": 1.0}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "pgnparsertest", "label": "PgnParserTest.scala", "file_type": "code", "source_file": "modules/io/src/test/scala/de/nowchess/io/pgn/PgnParserTest.scala", "source_location": "L1"}, {"id": "pgnparsertest_pgnparsertest", "label": "PgnParserTest", "file_type": "code", "source_file": "modules/io/src/test/scala/de/nowchess/io/pgn/PgnParserTest.scala", "source_location": "L10"}], "edges": [{"source": "pgnparsertest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/io/src/test/scala/de/nowchess/io/pgn/PgnParserTest.scala", "source_location": "L3", "weight": 1.0}, {"source": "pgnparsertest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/io/src/test/scala/de/nowchess/io/pgn/PgnParserTest.scala", "source_location": "L4", "weight": 1.0}, {"source": "pgnparsertest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/io/src/test/scala/de/nowchess/io/pgn/PgnParserTest.scala", "source_location": "L5", "weight": 1.0}, {"source": "pgnparsertest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/io/src/test/scala/de/nowchess/io/pgn/PgnParserTest.scala", "source_location": "L6", "weight": 1.0}, {"source": "pgnparsertest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/io/src/test/scala/de/nowchess/io/pgn/PgnParserTest.scala", "source_location": "L7", "weight": 1.0}, {"source": "pgnparsertest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/io/src/test/scala/de/nowchess/io/pgn/PgnParserTest.scala", "source_location": "L8", "weight": 1.0}, {"source": "pgnparsertest", "target": "pgnparsertest_pgnparsertest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/io/src/test/scala/de/nowchess/io/pgn/PgnParserTest.scala", "source_location": "L10", "weight": 1.0}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "defaultrulestest", "label": "DefaultRulesTest.scala", "file_type": "code", "source_file": "modules/rule/src/test/scala/de/nowchess/rule/DefaultRulesTest.scala", "source_location": "L1"}, {"id": "defaultrulestest_defaultrulestest", "label": "DefaultRulesTest", "file_type": "code", "source_file": "modules/rule/src/test/scala/de/nowchess/rule/DefaultRulesTest.scala", "source_location": "L11"}], "edges": [{"source": "defaultrulestest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/rule/src/test/scala/de/nowchess/rule/DefaultRulesTest.scala", "source_location": "L3", "weight": 1.0}, {"source": "defaultrulestest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/rule/src/test/scala/de/nowchess/rule/DefaultRulesTest.scala", "source_location": "L4", "weight": 1.0}, {"source": "defaultrulestest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/rule/src/test/scala/de/nowchess/rule/DefaultRulesTest.scala", "source_location": "L5", "weight": 1.0}, {"source": "defaultrulestest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/rule/src/test/scala/de/nowchess/rule/DefaultRulesTest.scala", "source_location": "L6", "weight": 1.0}, {"source": "defaultrulestest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/rule/src/test/scala/de/nowchess/rule/DefaultRulesTest.scala", "source_location": "L7", "weight": 1.0}, {"source": "defaultrulestest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/rule/src/test/scala/de/nowchess/rule/DefaultRulesTest.scala", "source_location": "L8", "weight": 1.0}, {"source": "defaultrulestest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/rule/src/test/scala/de/nowchess/rule/DefaultRulesTest.scala", "source_location": "L9", "weight": 1.0}, {"source": "defaultrulestest", "target": "defaultrulestest_defaultrulestest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/rule/src/test/scala/de/nowchess/rule/DefaultRulesTest.scala", "source_location": "L11", "weight": 1.0}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "polyglothash", "label": "PolyglotHash.scala", "file_type": "code", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/util/PolyglotHash.scala", "source_location": "L1"}, {"id": "polyglothash_polyglothash", "label": "PolyglotHash", "file_type": "code", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/util/PolyglotHash.scala", "source_location": "L6"}, {"id": "polyglothash_polyglothash_hash", "label": ".hash()", "file_type": "code", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/util/PolyglotHash.scala", "source_location": "L208"}, {"id": "polyglothash_polyglothash_pieceindex", "label": ".pieceIndex()", "file_type": "code", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/util/PolyglotHash.scala", "source_location": "L238"}, {"id": "polyglothash_polyglothash_squareindex", "label": ".squareIndex()", "file_type": "code", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/util/PolyglotHash.scala", "source_location": "L249"}, {"id": "polyglothash_polyglothash_cancaptureenpassant", "label": ".canCaptureEnPassant()", "file_type": "code", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/util/PolyglotHash.scala", "source_location": "L252"}], "edges": [{"source": "polyglothash", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/util/PolyglotHash.scala", "source_location": "L3", "weight": 1.0}, {"source": "polyglothash", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/util/PolyglotHash.scala", "source_location": "L4", "weight": 1.0}, {"source": "polyglothash", "target": "polyglothash_polyglothash", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/util/PolyglotHash.scala", "source_location": "L6", "weight": 1.0}, {"source": "polyglothash_polyglothash", "target": "polyglothash_polyglothash_hash", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/util/PolyglotHash.scala", "source_location": "L208", "weight": 1.0}, {"source": "polyglothash_polyglothash", "target": "polyglothash_polyglothash_pieceindex", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/util/PolyglotHash.scala", "source_location": "L238", "weight": 1.0}, {"source": "polyglothash_polyglothash", "target": "polyglothash_polyglothash_squareindex", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/util/PolyglotHash.scala", "source_location": "L249", "weight": 1.0}, {"source": "polyglothash_polyglothash", "target": "polyglothash_polyglothash_cancaptureenpassant", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/util/PolyglotHash.scala", "source_location": "L252", "weight": 1.0}, {"source": "polyglothash_polyglothash_hash", "target": "polyglothash_polyglothash_pieceindex", "relation": "calls", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/util/PolyglotHash.scala", "source_location": "L213", "weight": 1.0}, {"source": "polyglothash_polyglothash_hash", "target": "polyglothash_polyglothash_squareindex", "relation": "calls", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/util/PolyglotHash.scala", "source_location": "L213", "weight": 1.0}, {"source": "polyglothash_polyglothash_hash", "target": "polyglothash_polyglothash_cancaptureenpassant", "relation": "calls", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/util/PolyglotHash.scala", "source_location": "L228", "weight": 1.0}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "colortest", "label": "ColorTest.scala", "file_type": "code", "source_file": "modules/api/src/test/scala/de/nowchess/api/board/ColorTest.scala", "source_location": "L1"}, {"id": "colortest_colortest", "label": "ColorTest", "file_type": "code", "source_file": "modules/api/src/test/scala/de/nowchess/api/board/ColorTest.scala", "source_location": "L6"}], "edges": [{"source": "colortest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/api/src/test/scala/de/nowchess/api/board/ColorTest.scala", "source_location": "L3", "weight": 1.0}, {"source": "colortest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/api/src/test/scala/de/nowchess/api/board/ColorTest.scala", "source_location": "L4", "weight": 1.0}, {"source": "colortest", "target": "colortest_colortest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/api/src/test/scala/de/nowchess/api/board/ColorTest.scala", "source_location": "L6", "weight": 1.0}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "transpositiontable", "label": "TranspositionTable.scala", "file_type": "code", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/logic/TranspositionTable.scala", "source_location": "L1"}, {"id": "transpositiontable_ttentry", "label": "TTEntry", "file_type": "code", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/logic/TranspositionTable.scala", "source_location": "L10"}, {"id": "transpositiontable_transpositiontable", "label": "TranspositionTable", "file_type": "code", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/logic/TranspositionTable.scala", "source_location": "L18"}, {"id": "transpositiontable_transpositiontable_probe", "label": ".probe()", "file_type": "code", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/logic/TranspositionTable.scala", "source_location": "L24"}, {"id": "transpositiontable_transpositiontable_store", "label": ".store()", "file_type": "code", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/logic/TranspositionTable.scala", "source_location": "L30"}, {"id": "transpositiontable_transpositiontable_clear", "label": ".clear()", "file_type": "code", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/logic/TranspositionTable.scala", "source_location": "L36"}], "edges": [{"source": "transpositiontable", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/logic/TranspositionTable.scala", "source_location": "L3", "weight": 1.0}, {"source": "transpositiontable", "target": "transpositiontable_ttentry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/logic/TranspositionTable.scala", "source_location": "L10", "weight": 1.0}, {"source": "transpositiontable", "target": "transpositiontable_transpositiontable", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/logic/TranspositionTable.scala", "source_location": "L18", "weight": 1.0}, {"source": "transpositiontable_transpositiontable", "target": "transpositiontable_transpositiontable_probe", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/logic/TranspositionTable.scala", "source_location": "L24", "weight": 1.0}, {"source": "transpositiontable_transpositiontable", "target": "transpositiontable_transpositiontable_store", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/logic/TranspositionTable.scala", "source_location": "L30", "weight": 1.0}, {"source": "transpositiontable_transpositiontable", "target": "transpositiontable_transpositiontable_clear", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/bot/src/main/scala/de/nowchess/bot/logic/TranspositionTable.scala", "source_location": "L36", "weight": 1.0}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "moveorderingtest", "label": "MoveOrderingTest.scala", "file_type": "code", "source_file": "modules/bot/src/test/scala/de/nowchess/bot/MoveOrderingTest.scala", "source_location": "L1"}, {"id": "moveorderingtest_moveorderingtest", "label": "MoveOrderingTest", "file_type": "code", "source_file": "modules/bot/src/test/scala/de/nowchess/bot/MoveOrderingTest.scala", "source_location": "L10"}], "edges": [{"source": "moveorderingtest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/test/scala/de/nowchess/bot/MoveOrderingTest.scala", "source_location": "L3", "weight": 1.0}, {"source": "moveorderingtest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/test/scala/de/nowchess/bot/MoveOrderingTest.scala", "source_location": "L4", "weight": 1.0}, {"source": "moveorderingtest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/test/scala/de/nowchess/bot/MoveOrderingTest.scala", "source_location": "L5", "weight": 1.0}, {"source": "moveorderingtest", "target": "de", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/test/scala/de/nowchess/bot/MoveOrderingTest.scala", "source_location": "L6", "weight": 1.0}, {"source": "moveorderingtest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/test/scala/de/nowchess/bot/MoveOrderingTest.scala", "source_location": "L7", "weight": 1.0}, {"source": "moveorderingtest", "target": "org", "relation": "imports", "confidence": "EXTRACTED", "source_file": "modules/bot/src/test/scala/de/nowchess/bot/MoveOrderingTest.scala", "source_location": "L8", "weight": 1.0}, {"source": "moveorderingtest", "target": "moveorderingtest_moveorderingtest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/bot/src/test/scala/de/nowchess/bot/MoveOrderingTest.scala", "source_location": "L10", "weight": 1.0}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "start", "label": "start.ps1", "file_type": "code", "source_file": "modules/bot/python/start.ps1", "source_location": "L1"}], "edges": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "build_gradle", "label": "build.gradle.kts", "file_type": "code", "source_file": "modules/api/build.gradle.kts", "source_location": "L1"}], "edges": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "castlingrights", "label": "CastlingRights.scala", "file_type": "code", "source_file": "modules/api/src/main/scala/de/nowchess/api/board/CastlingRights.scala", "source_location": "L1"}, {"id": "castlingrights_castlingrights", "label": "CastlingRights", "file_type": "code", "source_file": "modules/api/src/main/scala/de/nowchess/api/board/CastlingRights.scala", "source_location": "L12"}, {"id": "castlingrights_castlingrights_hasanyrights", "label": ".hasAnyRights()", "file_type": "code", "source_file": "modules/api/src/main/scala/de/nowchess/api/board/CastlingRights.scala", "source_location": "L21"}, {"id": "castlingrights_castlingrights_hasrights", "label": ".hasRights()", "file_type": "code", "source_file": "modules/api/src/main/scala/de/nowchess/api/board/CastlingRights.scala", "source_location": "L27"}, {"id": "castlingrights_castlingrights_revokecolor", "label": ".revokeColor()", "file_type": "code", "source_file": "modules/api/src/main/scala/de/nowchess/api/board/CastlingRights.scala", "source_location": "L34"}, {"id": "castlingrights_castlingrights_revokekingside", "label": ".revokeKingSide()", "file_type": "code", "source_file": "modules/api/src/main/scala/de/nowchess/api/board/CastlingRights.scala", "source_location": "L41"}, {"id": "castlingrights_castlingrights_revokequeenside", "label": ".revokeQueenSide()", "file_type": "code", "source_file": "modules/api/src/main/scala/de/nowchess/api/board/CastlingRights.scala", "source_location": "L48"}], "edges": [{"source": "castlingrights", "target": "castlingrights_castlingrights", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/board/CastlingRights.scala", "source_location": "L12", "weight": 1.0}, {"source": "castlingrights_castlingrights", "target": "castlingrights_castlingrights_hasanyrights", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/board/CastlingRights.scala", "source_location": "L21", "weight": 1.0}, {"source": "castlingrights_castlingrights", "target": "castlingrights_castlingrights_hasrights", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/board/CastlingRights.scala", "source_location": "L27", "weight": 1.0}, {"source": "castlingrights_castlingrights", "target": "castlingrights_castlingrights_revokecolor", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/board/CastlingRights.scala", "source_location": "L34", "weight": 1.0}, {"source": "castlingrights_castlingrights", "target": "castlingrights_castlingrights_revokekingside", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/board/CastlingRights.scala", "source_location": "L41", "weight": 1.0}, {"source": "castlingrights_castlingrights", "target": "castlingrights_castlingrights_revokequeenside", "relation": "method", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/board/CastlingRights.scala", "source_location": "L48", "weight": 1.0}, {"source": "castlingrights", "target": "castlingrights_castlingrights", "relation": "contains", "confidence": "EXTRACTED", "source_file": "modules/api/src/main/scala/de/nowchess/api/board/CastlingRights.scala", "source_location": "L52", "weight": 1.0}]}

Some files were not shown because too many files have changed in this diff Show More