Skip to content

feat: persist PGN position snapshots by chapter - #21

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

levallem merged 1 commit into
mainfrom
feat/cms-024g-pgn-snapshot-persistence

Conversation

@levallem

Copy link
Copy Markdown
Owner

Resumen

Implementa CMS-024G añadiendo persistencia chapter-scoped para PgnPositionSnapshot mediante project schema v4.

Los snapshots PGN ahora pueden persistirse y recuperarse por capítulo sin integrar todavía UI.

Persistencia

Nueva tabla:

chapter_pgn_positions

Conserva:

  • source game index;
  • ply;
  • selected FEN;
  • initial FEN;
  • main line UCI;
  • los nueve ImportedGameHeaders.

La lectura reconstruye PgnPositionSnapshot y ejecuta validate() antes de devolver datos al dominio.

Idempotencia

La UNIQUE contextual usa:

  • chapter;
  • initial FEN;
  • main line;
  • ply.

Semántica:

  • contexto nuevo → Inserted;
  • mismo contexto + mismos headers → AlreadyExists;
  • mismo contexto + headers distintos → error explícito.

source_game_index no participa en identidad.

selected_fen se persiste y valida, pero no participa en deduplicación.

Integridad

  • PROJECT_SCHEMA_VERSION = 4;
  • FK chapter_id → chapters(id) ON DELETE CASCADE;
  • PRAGMA foreign_keys = ON en las conexiones de proyecto;
  • cascade probado;
  • snapshots inválidos se rechazan antes de escribir;
  • filas corruptas se rechazan al leer;
  • conversiones numéricas son comprobadas;
  • upgrade v3→v4 tiene rollback transaccional probado.

Scope

Sólo cambian:

  • src/project.rs
  • project_migrations/2026-09-22-000000_create_chapter_pgn_positions/up.sql
  • project_migrations/2026-09-22-000000_create_chapter_pgn_positions/down.sql

No hay cambios en:

  • UI;
  • PgnTab;
  • ProjectTab;
  • main.rs;
  • Puzzle;
  • exportación;
  • engine;
  • traducciones;
  • dependencias.

Validation

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

Todas aprobadas.

Closes #20

@levallem levallem added the type:feature Feature work label Sep 22, 2026
@levallem
levallem merged commit 8b97d45 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-024G — Persist PGN position snapshots by chapter

1 participant