# Changelog VMS-Sailor Formato basado en [Keep a Changelog](https://keepachangelog.com/) + [SemVer](https://semver.org/). ## [0.1.0-sprint0] — 2026-05-16 ### Added — Fundaciones (Sprint 0) #### Estructura del proyecto - `pyproject.toml` configurado con uv, ruff, mypy, pytest - Python 3.11 fijado en `.python-version` - `.gitignore` cubriendo Python, build, IDE, mobile (Flutter), firmware (PlatformIO), artefactos Runtime - Estructura de carpetas completa: `vmssailor/`, `firmware/`, `mobile/`, `tests/`, `tools/`, `docs/`, `installer/` #### Modelo de datos core (`vmssailor/core/`) - `coords.py`: `ShipCoord(x_pp, y_cl, z_bl)` frozen Pydantic model, sistema naval estándar - `enums.py`: catálogo completo de enums (`SignalType`, `ChannelType`, `AlarmPriority`, `AlarmState`, `ControlMode`, `AuthorityRequired`, `Protocol`, `BusRole`, `FilterType`, `Quality`, `EquipmentCategory`, `SystemId`, `UnitSI`, `VesselType`, `VesselSubtype`) - `vessel.py`: `Vessel`, `Deck`, `Bulkhead` - `equipment.py`: `Equipment`, `EquipmentModel`, `Sensor`, `EquipmentSpec` - `tag.py`: `Tag`, `AlarmConfig`, `TagBinding`, `Scaling` - `card.py`: `CardInstance`, `Bus`, `Topology`, validación de capacidades 21 puntos I/O - `alarm.py`: `Alarm` (instancia activa) - `permissive.py`: `PermissiveRule`, `Condition` - `project.py`: `Project` (agregado raíz) - `validation.py`: invariantes cross-entity #### Persistencia (`vmssailor/core/persistence/`) - Schema SQLite portable `.vmsproj` (15+ tablas, versionado en `schema_version`) - Writer + Reader con roundtrip verificable - `migrations.py` placeholder versionado #### Biblioteca curada seed (`vmssailor/library/`) - `systems_catalog.json`: catálogo maestro completo con TODOS los sistemas de la Parte 1 sec 7 (propulsión, maniobra, generación eléctrica, fluidos, seguridad, ambiente, iluminación, tanques, cubierta, específicos por tipo) - `vessels/sunseeker_76.json` - `vessels/ferretti_850.json` - `equipment/engines/mtu_12v_2000_m96.json` - `equipment/engines/volvo_d13_900hp.json` - `equipment/gensets/northern_lights_m65c13.json` - `rules/yacht_motor_planeo.yaml`: reglas heurísticas - `loader.py`: carga + validación de toda la biblioteca **NOTA:** todos los archivos seed traen `data_source: "seed_estimate"` — valores plausibles que requieren validación de Álvaro contra datasheets oficiales antes de Sprint 1. #### Tools - `tools/validate_library.py`: CLI que valida integridad de toda `vmssailor/library/` - `tools/generate_test_project.py`: demo que crea un proyecto completo (Sunseeker 76 + equipos + tags + cards) → guarda `.vmsproj` → lo relee → verifica integridad campo por campo #### Tests (`tests/`) - `tests/core/` — unit tests por entidad (≥ 80% cobertura objetivo) - `tests/core/persistence/test_roundtrip.py` — test crítico de serialización - `tests/library/` — tests de integridad de la seed #### Design System - `docs/design_system.md`: paleta (Deep Ocean + Sailor Cyan + Compass Amber + ...), tipografía (Inter UI + JetBrains Mono valores), gradientes (deep-sea, horizon, glow, glass), 5 niveles de sombra, motion principles, iconografía naval - `docs/mockups/` 8 mockups HTML+CSS+SVG estáticos: - `splash.html` — pantalla de bienvenida - `studio_main.html` — Studio Sprint 1 preview - `runtime_overview.html` — dashboard del buque - `runtime_mimic_fuel.html` — mímico sistema combustible con válvulas y bombas - `runtime_alarms.html` — panel de alarmas con prioridades - `runtime_trim.html` — panel Trim & Maniobra (estrella) con sliders y gauge roll/pitch - `mobile_overview.html` — versión iPhone - `mobile_trim.html` — Trim móvil - `docs/brand/` — logo SVG + variantes #### Documentación - `docs/architecture.md` — overview 1-pager con links a briefs - `docs/coords.md` — sistema de coordenadas navales explicado - `docs/seed_data_notes.md` — qué entradas requieren validación de Álvaro - `docs/decisions_sprint0.md` — decisiones tomadas autónomamente durante Sprint 0 #### Firmware - `firmware/ar_nmea_io_v1/src/config/pinout.h`: definiciones GPIO según Parte 4 sec 1 (sin código compilable aún) - `firmware/ar_nmea_io_v1/README.md` ### Decisiones tomadas autónomamente (revisar en `docs/decisions_sprint0.md`) - Pydantic v2 (no v1, no dataclasses) — validación + serialización built-in - SQLite stdlib (no SQLAlchemy en Sprint 0) — `.vmsproj` es portable y plano - `hatchling` como build backend (no setuptools) — moderno, integra con uv - `data_source` flag obligatorio en entradas de biblioteca - IDs de tags deterministas: `{equipment.tag_prefix}.{sensor.id}` - Encoding de coordenadas: tres `float` Pydantic con validadores de rango razonable ### Not Yet - Sin PySide6, FastAPI, pymodbus, duckdb, pywin32 (entran en sprints siguientes) - Sin compilador `.vmspack` (Sprint 7) - Sin Flutter (Sprint 11) - Sin firmware funcional (Sprint 12)