Skip to content

feat: add reproducible PGN position snapshots - #19

Merged
levallem merged 1 commit into
mainfrom
feat/cms-024f-pgn-position-snapshot
Sep 22, 2026
Merged

levallem merged 1 commit into
mainfrom
feat/cms-024f-pgn-position-snapshot

Conversation

@levallem

Copy link
Copy Markdown
Owner

Summary

Implementa CMS-024F introduciendo PgnPositionSnapshot, una representación PGN autocontenida y reproducible completamente en memoria.

El snapshot conserva:

  • índice de partida de origen;
  • ply seleccionado;
  • FEN inicial;
  • FEN seleccionada;
  • main line completa en UCI canónico;
  • ImportedGameHeaders.

Puede reconstruir y validar la posición seleccionada sin consultar el PGN original ni una PgnReviewSession mutable.

Motivation

Cerrar el contrato de dominio de snapshots PGN reproducibles antes de persistencia o integración de UI.

Validation de dominio

PgnPositionSnapshot:

  • parsea y valida la FEN inicial;
  • valida límites de ply_index;
  • parsea y valida legalidad de toda la main line UCI;
  • reproduce toda la partida almacenada;
  • conserva exactamente el Board alcanzado en el ply seleccionado;
  • parsea selected_fen como Board;
  • compara semánticamente el Board seleccionado con el reconstruido;
  • falla de forma controlada ante snapshots corruptos.

También deriva la jugada anterior y siguiente sin almacenarlas de forma redundante.

Changes

Archivo Cambio
src/pgn_review.rs Modelo, captura, replay validable y tests de PgnPositionSnapshot.

Scope

Sólo cambia src/pgn_review.rs.

No hay cambios en UI, PgnTab, proyectos o capítulos, SQLite, schema, migraciones, Puzzle, ProjectPuzzleDecision, exportación PDF/PGN, engine, traducciones ni dependencias.

PROJECT_SCHEMA_VERSION permanece en 3.

Tests

Cobertura añadida para partida estándar, SetUp/FEN, ply inicial/intermedio/final, partida sin movimientos, conservación de headers, replay exacto, previous/next, FEN inicial inválida, selected FEN inválida, FEN textualmente distinta pero semánticamente equivalente, UCI inválido, movimiento UCI ilegal, movimiento ilegal posterior al ply seleccionado, ply fuera de rango y posición seleccionada inconsistente.

Validation

  • cargo fmt --check
  • cargo clippy --locked --all-targets -- -D warnings
  • cargo test --locked — 552 tests
  • cargo check --locked --all-targets
  • cargo build --locked
  • git diff --check

Todas aprobadas.

Screenshots

No aplica: no hay cambios visuales.

Database / migration impact

None.

Closes #18

@levallem levallem added the type:feature Feature work label Sep 22, 2026
@levallem
levallem merged commit 501d3a2 into main Sep 22, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type:feature Feature work

Projects

None yet

Development

Successfully merging this pull request may close these issues.

CMS-024F — Add reproducible PGN position snapshots

1 participant