Replace absolute 768-feature encoding with dual-perspective king-relative
encoding (HalfKP style): each piece is encoded from both the white king's
and the black king's reference frame, yielding 98304 input features
(2 × 64 king-squares × 12 piece-types × 64 squares).
Key changes:
- NNUE.scala: featureIdxWhite/featureIdxBlack replace featureIndex;
pushAccumulator now accepts childBoard and recomputes on king moves
(castle or normal king move) instead of using stale incremental state;
non-king moves update both perspectives incrementally (~4 column ops).
- EvaluationNNUE.scala: pass child.board to pushAccumulator.
- python/src/train.py: fen_to_features produces 98304-dim HalfKP vector;
NNUE model input size updated to INPUT_SIZE (98304); DEFAULT_HIDDEN_SIZES
reduced to [512, 256, 128] appropriate for sparse high-dim input.
- nnue_weights.nbai: replaced with placeholder 98304→16→8→1 model so
tests compile and run; replace with a retrained model via Colab notebook.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>