diff --git a/README.md b/README.md index b5f7921..95ab5d8 100644 --- a/README.md +++ b/README.md @@ -1,413 +1,365 @@ -# ChessPersona +# ChessPersona [![Tests](https://github.com/rotatedcoded/ChessPersona/actions/workflows/tests.yml/badge.svg?branch=develop)](https://github.com/rotatedcoded/ChessPersona/actions/workflows/tests.yml) -ChessPersona adalah aplikasi desktop lokal untuk membuat dan memainkan bot catur yang meniru kecenderungan bermain sebuah akun Chess.com. Persona dibangun dari riwayat permainan publik, lalu dipadukan dengan analisis Stockfish untuk memilih langkah secara legal dan tetap menyerupai gaya pemain tersebut. +ChessPersona adalah aplikasi desktop lokal untuk membuat bot catur yang meniru kecenderungan bermain akun Chess.com tertentu. -> **Status:** `v0.1.0-mvp` — stable local MVP +Aplikasi mengambil game publik dari Chess.com, menganalisis pola bermain, memakai Stockfish untuk kandidat langkah legal, lalu membuat persona yang bisa kamu lawan langsung di GUI. + +> **Status:** `v0.2.0-local-mvp` > **Platform utama:** Windows 10/11 -> **Bahasa:** Python 3.12 + PySide6 - -## Fitur utama - -- Membuat persona dari username Chess.com. -- Mendukung mode **Rapid** dan **Blitz**. -- Tiga tingkat analisis: - - **Quick:** sampai 20 game per mode. - - **Standard:** sampai 100 game per mode. - - **Full:** sampai 500 game per mode. -- Cache dan checkpoint analisis agar proses dapat dilanjutkan. -- Persona Quick, Standard, dan Full disimpan terpisah. -- Otomatis memakai persona dengan kualitas tertinggi yang tersedia. -- Pemilihan langkah berbasis campuran: - - kandidat Stockfish; - - riwayat opening pemain; - - distribusi kualitas langkah; - - karakter permainan berdasarkan fase. -- Slider **Similarity** dari 0% sampai 100%. -- Human dapat bermain sebagai **White**, **Black**, atau **Random**. -- Evaluation bar diperbarui setelah langkah human dan bot. -- Evaluation bar dapat diaktifkan atau dinonaktifkan. -- Pilihan piece set dan board theme. -- Move history dan penjelasan keputusan persona. -- Promosi pawn ke Queen, Rook, Bishop, atau Knight. -- Resign dengan konfirmasi. -- Export permainan ke PGN. -- Persona tersimpan dapat dimuat tanpa membuat ulang. -- Pembuatan persona dapat dibatalkan dengan aman. - -## Cara kerja - -1. ChessPersona mengambil permainan publik dari Chess.com. -2. Game Rapid dan Blitz dipisahkan. -3. Dataset dianalisis untuk menemukan kebiasaan opening, kualitas langkah, kecenderungan risiko, performa tiap fase, dan pola lainnya. -4. Stockfish menghasilkan kandidat langkah legal. -5. Persona memilih salah satu kandidat berdasarkan nilai engine dan profil pemain. -6. Nilai **Similarity** menentukan seberapa kuat profil pemain memengaruhi pilihan langkah. - -### Arti Similarity - -| Nilai | Perilaku | -|---:|---| -| `0%` | Selalu memilih kandidat terbaik Stockfish. | -| `1–49%` | Lebih dekat ke Stockfish, dengan sedikit pengaruh persona. | -| `50–99%` | Campuran antara kekuatan engine dan kebiasaan pemain. | -| `100%` | Pengaruh persona berada pada tingkat tertinggi. | - -Similarity 100% tidak menjamin bot mengulang semua langkah pemain secara persis. Keputusan tetap bergantung pada posisi, kandidat legal, data historis yang tersedia, dan pemilihan berbobot. +> **Bahasa:** Python 3.12 + PySide6 +> **Target:** local desktop app, dijalankan dari VS Code / PowerShell -## Persyaratan +--- + +## Fitur MVP + +- Create / Update persona dari username Chess.com. +- Mode **Rapid** dan **Blitz**. +- Pipeline otomatis dari GUI: + - download games; + - behavioral analysis; + - move quality analysis dengan Stockfish; + - complete persona build; + - Direct Ranker training; + - release gate / runtime readiness check; + - safe fallback kalau advanced ML belum siap. +- Bot bisa dimainkan dari GUI. +- Evaluation bar. +- Move history. +- Penjelasan keputusan persona. +- Promotion dialog. +- Resign. +- Export PGN. +- Board theme dan piece set. +- Local smoke test runner. +- Stockfish auto-recover jika engine process mati setelah workload berat. + +--- + +## Status runtime + +ChessPersona punya beberapa level runtime: + +| Status | Arti | +|---|---| +| `Runtime READY` | Advanced runtime siap dipakai oleh UI. | +| `needs_more_evidence` | Persona sudah playable, tapi advanced ML belum cukup evidence. UI akan fallback aman. | +| `Statistical selector` | Mode aman default. Bot tetap bisa dimainkan. | + +`needs_more_evidence` **bukan crash**. Itu berarti data/evidence belum cukup untuk unlock advanced ML, tetapi persona tetap bisa dimainkan dengan Statistical selector. + +--- + +## Preset analisis + +| Preset | Target game | Kegunaan | +|---|---:|---| +| Quick | 100 game | Test cepat, smoke test, persona awal. | +| Standard | 300 game | Kualitas lebih baik tanpa terlalu berat. | +| Full | 500 game | Profil paling lengkap dari data yang tersedia. | -- Windows 10 atau Windows 11. -- Python 3.12 direkomendasikan. -- Koneksi internet saat membuat atau memperbarui persona. -- Stockfish untuk analisis dan permainan. -- Akun Chess.com yang riwayat permainannya tersedia secara publik. +Quick sering menghasilkan `needs_more_evidence`. Itu normal. -Setelah persona selesai dibuat, permainan dapat dijalankan secara lokal. Koneksi internet hanya diperlukan kembali saat mengambil atau memperbarui data Chess.com. +--- -## Instalasi +## Rekomendasi lokasi project -Buka PowerShell di folder project: +Disarankan menjalankan project dari disk yang lega, misalnya: ```powershell -Set-Location "C:\Users\user\Projects\ChessPersona" +D:\Projects\ChessPersona ``` -Buat virtual environment: +Data besar akan tersimpan relatif terhadap folder project: -```powershell -py -3.12 -m venv .venv +```text +data\datasets +data\personas +data\analysis +data\ml ``` -Aktifkan virtual environment: +Kalau project dijalankan dari `D:\Projects\ChessPersona`, maka data tersebut masuk ke disk D. + +--- + +## Persyaratan + +- Windows 10/11. +- Python 3.12. +- Git. +- Stockfish executable. +- Koneksi internet saat Create / Update persona. +- Akun Chess.com target harus punya game publik. + +Setelah persona dibuat, game bisa dimainkan lokal tanpa koneksi internet. + +--- + +## Setup dari PowerShell + +Masuk ke folder project: ```powershell -.\.venv\Scripts\Activate.ps1 +cd D:\Projects\ChessPersona ``` -Perbarui pip: +Buat virtual environment jika belum ada: ```powershell -python -m pip install --upgrade pip +py -3.12 -m venv .venv ``` -Instal dependency: +Aktifkan virtual environment: ```powershell -python -m pip install -r requirements.txt +.\.venv\Scripts\Activate.ps1 ``` -### PowerShell menolak aktivasi virtual environment - -Jalankan ini untuk sesi terminal yang sedang aktif: +Jika PowerShell menolak aktivasi: ```powershell Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass .\.venv\Scripts\Activate.ps1 ``` -## Memasang Stockfish +Install dependency: -Letakkan executable Stockfish pada lokasi berikut: +```powershell +python -m pip install --upgrade pip +python -m pip install -r requirements.txt -```text -ChessPersona/ -└── engines/ - └── stockfish/ - └── stockfish.exe +if (Test-Path .\requirements-dev.txt) { + python -m pip install -r requirements-dev.txt +} + +if (Test-Path .\requirements-ml.txt) { + python -m pip install -r requirements-ml.txt +} ``` -Path default yang digunakan aplikasi: +--- + +## Stockfish + +Path default: ```text -engines/stockfish/stockfish.exe +engines\stockfish\stockfish.exe ``` -Periksa dari PowerShell: +Cek: ```powershell Test-Path .\engines\stockfish\stockfish.exe ``` -Hasil yang benar: +Output yang benar: ```text True ``` -## Menjalankan aplikasi - -Pastikan virtual environment aktif, lalu jalankan: +Kalau Stockfish masih ada di folder lain, copy ke path default: ```powershell -python app.py -``` +New-Item -ItemType Directory -Force .\engines\stockfish -## Membuat persona melalui GUI - -1. Masukkan username pada kolom **Chess.com Username**. -2. Pilih **Quick**, **Standard**, atau **Full**. -3. Klik **Create / Update**. -4. Tunggu proses download dan analisis selesai. -5. Persona yang selesai akan otomatis tersedia di **Saved Personas**. -6. Pilih mode Rapid atau Blitz, lalu mulai game baru. - -Proses dapat dibatalkan. Game yang sudah selesai dianalisis tetap tersimpan sebagai checkpoint dan dapat digunakan saat proses dijalankan kembali. +Copy-Item C:\Users\user\stockfish\stockfish-windows-x86-64-avx2.exe ` + .\engines\stockfish\stockfish.exe +``` -## Membuat persona melalui terminal +--- -ChessPersona juga menyediakan pembuat persona berbasis terminal: +## Menjalankan aplikasi ```powershell -python create_persona.py +python .\app.py ``` -Ikuti petunjuk untuk memasukkan username dan memilih preset. +Cara pakai GUI: -## Tingkat analisis +1. Masukkan username Chess.com. +2. Pilih Rapid atau Blitz. +3. Pilih preset Quick / Standard / Full. +4. Klik **Create / Update**. +5. Tunggu pipeline selesai. +6. Kalau muncul `needs_more_evidence`, itu aman. +7. Persona akan dimuat dan bot bisa dimainkan. -| Preset | Batas game | Kegunaan | -|---|---:|---| -| Quick | 20 per mode | Pengujian cepat dan persona awal. | -| Standard | 100 per mode | Keseimbangan antara waktu dan kualitas. | -| Full | 500 per mode | Profil paling lengkap dari data yang tersedia. | +--- -Menjalankan Quick tidak menimpa Standard atau Full. ChessPersona menyimpan setiap preset secara terpisah dan memilih hasil dengan tingkat tertinggi yang tersedia. +## Local smoke test -## Struktur project +Sebelum merge, release, atau tag stabil, jalankan: -```text -ChessPersona/ -├── app.py -├── create_persona.py -├── requirements.txt -├── README.md -├── CREDITS.md -├── assets/ -│ ├── boards/ -│ └── pieces/ -├── data/ -│ ├── analysis/ -│ ├── cache/ -│ ├── datasets/ -│ ├── personas/ -│ └── pgn/ -├── engines/ -│ └── stockfish/ -│ └── stockfish.exe -├── exports/ -├── src/ -│ ├── analysis/ -│ ├── api/ -│ ├── bot/ -│ ├── data/ -│ ├── engine/ -│ ├── persona/ -│ └── ui/ -└── test_*.py +```powershell +python .\run_local_smoke_tests.py ``` -### Folder penting - -- `assets/` — piece set dan board theme. -- `data/datasets/` — game yang dikumpulkan dari Chess.com. -- `data/analysis/` — hasil analisis dan move-quality cache. -- `data/personas/` — file persona siap dimainkan. -- `engines/stockfish/` — executable Stockfish lokal. -- `exports/` — lokasi default hasil export PGN. -- `src/` — source code utama aplikasi. - -Folder `data/`, `.venv/`, dan `engines/` sebaiknya tidak dimasukkan ke repository publik. File tersebut bersifat lokal, dapat berukuran besar, atau perlu dipasang terpisah. - -## Pengujian - -Compile seluruh source code: +Setelah semua perubahan sudah committed, bisa pakai mode strict: ```powershell -python -m compileall -q app.py create_persona.py src +python .\run_local_smoke_tests.py --strict-release-check ``` -Tidak ada output berarti pemeriksaan sintaks berhasil. - -Tes Stockfish: +Checker khusus release candidate: ```powershell -python test_stockfish.py +python .\check_release_candidate.py ` + --engine-path engines\stockfish\stockfish.exe ``` -Tes persona bot: +Runtime readiness untuk persona tertentu: ```powershell -python test_persona_bot.py +python .\check_runtime_readiness.py ` + --username jiqy ` + --time-class blitz ` + --engine-path engines\stockfish\stockfish.exe ``` -Tes evaluation: +--- -```powershell -python test_evaluation.py -``` +## Git hygiene -Tes promosi: +Jangan commit data generated lokal: -```powershell -python test_promotion.py +```text +data\datasets +data\personas +data\analysis +data\ml ``` -Periksa bahwa Stockfish berhenti setelah aplikasi ditutup: +Yang boleh tracked hanya placeholder `.gitkeep`, jika ada. + +Sebelum commit: ```powershell -Get-Process stockfish -ErrorAction SilentlyContinue +git status --short +git diff --cached --name-only ``` -Tidak ada output berarti tidak ada proses Stockfish yang tertinggal. - -## Export PGN +Kalau muncul file di folder `data\...`, jangan stage file itu. -Klik **Export PGN** di aplikasi. File PGN menyimpan informasi seperti: +--- -- nama persona; -- mode Rapid atau Blitz; -- similarity; -- sisi human; -- hasil permainan; -- alasan termination untuk resign; -- piece set dan board theme; -- status evaluation bar. +## Struktur folder penting -Contoh header: - -```pgn -[Event "ChessPersona Local Game"] -[White "Human"] -[Black "ChessPersona - username"] -[Result "0-1"] -[Termination "Human resigned"] -[Persona "username"] -[PersonaMode "rapid"] -[Similarity "100"] +```text +ChessPersona/ +├── app.py +├── run_full_persona_pipeline.py +├── check_runtime_readiness.py +├── check_release_candidate.py +├── run_local_smoke_tests.py +├── assets/ +├── data/ +│ ├── datasets/ +│ ├── personas/ +│ ├── analysis/ +│ └── ml/ +├── engines/ +│ └── stockfish/ +│ └── stockfish.exe +├── exports/ +├── src/ +│ ├── api/ +│ ├── bot/ +│ ├── engine/ +│ ├── ml/ +│ ├── persona/ +│ ├── runtime/ +│ └── ui/ +└── tests/ ``` +--- + ## Troubleshooting ### Stockfish tidak ditemukan -Pesan yang umum: - -```text -Stockfish tidak ditemukan -``` - -Pastikan file tersedia di: +Pastikan file ini ada: ```text engines\stockfish\stockfish.exe ``` -Jalankan aplikasi dari folder root ChessPersona, bukan dari folder `src`. +Jalankan aplikasi dari root project, bukan dari folder `src`. -### Persona belum muncul +### Bot error `engine event loop dead` -Periksa apakah file persona tersedia: +Versi MVP ini sudah punya Stockfish auto-recover. Kalau masih terjadi: ```powershell -Get-ChildItem .\data\personas -Recurse -Filter "*_complete_persona.json" +Get-Process stockfish -ErrorAction SilentlyContinue | + Stop-Process -Force ``` -Kemudian restart aplikasi atau klik **Load Persona**. - -### Username tidak ditemukan atau koneksi gagal - -Pastikan: - -- username Chess.com benar; -- koneksi internet aktif; -- profil dan arsip permainan dapat diakses; -- username hanya menggunakan huruf, angka, underscore, atau tanda hubung. - -Persona yang sudah tersimpan tetap dapat dimainkan meskipun koneksi internet sedang tidak tersedia. - -### `requirements.txt` menampilkan error karakter atau null byte - -Pada Windows PowerShell lama, output redirect dapat tersimpan sebagai UTF-16. Ubah kembali ke UTF-8: +Lalu buka ulang app: ```powershell -$content = Get-Content .\requirements.txt -$content | Set-Content -Encoding UTF8 .\requirements.txt +python .\app.py ``` -Lalu ulangi: +### Disk penuh -```powershell -python -m pip install -r requirements.txt -``` +Pipeline menyimpan data dan model di folder `data\...`. Jalankan project dari disk yang lega, misalnya D. -### Aplikasi ditutup saat bot berpikir - -ChessPersona dirancang untuk menghentikan worker dan Stockfish dengan aman. Bila proses masih tertinggal: +Cek drive: ```powershell -Get-Process stockfish -ErrorAction SilentlyContinue | - Stop-Process -Force +Get-PSDrive D ``` -## Git workflow +### Persona ready tapi advanced ML belum ready -Versi stabil berada pada branch utama dan ditandai dengan tag: +Kalau hasilnya `needs_more_evidence`, itu normal untuk Quick atau dataset kecil. Bot tetap playable dengan Statistical selector. -```text -v0.1.0-mvp -``` +--- -Pengembangan berikutnya dilakukan pada branch: +## Batasan MVP -```text -develop -``` - -Contoh setelah mengubah dokumentasi: - -```powershell -git add README.md -git commit -m "Add project README" -``` - -## Batasan saat ini - -- Fokus utama masih pada Windows. -- Hanya mode Rapid dan Blitz yang dianalisis. +- Fokus Windows lokal. +- Belum ada installer `.exe`. +- Belum ada cloud deploy. +- Rapid dan Blitz adalah fokus utama. - Kualitas persona bergantung pada jumlah dan variasi game publik. -- Persona adalah pendekatan statistik, bukan salinan sempurna seorang pemain. -- Model machine learning khusus belum digunakan. -- Belum tersedia installer atau executable mandiri. -- Tampilan dan pipeline masih ditujukan untuk penggunaan lokal. +- Bot meniru kecenderungan statistik, bukan menyalin pemain secara sempurna. -## Roadmap +--- -Rencana pengembangan menuju `v0.2.0`: +## Target release -- automated test suite dengan pytest; -- dokumentasi format persona; -- validasi dan migrasi schema data; -- logging yang lebih terstruktur; -- eksperimen baseline machine learning; -- perbandingan model ML dengan selector statistik; -- fallback aman ke selector statistik; -- packaging aplikasi Windows. +Target stabil saat ini: -## Data dan privasi +```text +v0.2.0 — Local MVP Stable +``` -ChessPersona menggunakan data permainan yang tersedia melalui layanan publik Chess.com. Dataset, cache, hasil analisis, dan persona disimpan secara lokal di folder `data/`. +Definisi done untuk MVP: -Periksa isi folder tersebut sebelum membagikan project atau membuat repository publik. +1. App bisa dibuka dari PowerShell / VS Code. +2. User bisa Create / Update persona. +3. Persona bisa dimainkan. +4. Runtime fallback aman jika advanced ML belum ready. +5. Smoke test lokal hijau. +6. Data generated tidak ikut commit. -ChessPersona bukan produk resmi dan tidak berafiliasi dengan Chess.com maupun proyek Stockfish. +--- ## Credits -Lihat [`CREDITS.md`](CREDITS.md) untuk sumber dan atribusi asset yang digunakan. +Lihat [`CREDITS.md`](CREDITS.md) untuk sumber dan atribusi asset. -## License +ChessPersona bukan produk resmi dan tidak berafiliasi dengan Chess.com maupun Stockfish. + +--- -Lisensi project belum ditetapkan. Tambahkan file `LICENSE` sebelum mendistribusikan atau menerima kontribusi publik. +## License +Lisensi project belum ditetapkan. Tambahkan file `LICENSE` sebelum distribusi publik.