diff --git a/apps/toldo-app/android/app/build.gradle b/apps/toldo-app/android/app/build.gradle index fdcf24e..9d29336 100644 --- a/apps/toldo-app/android/app/build.gradle +++ b/apps/toldo-app/android/app/build.gradle @@ -1,14 +1,16 @@ apply plugin: 'com.android.application' android { + def appVersion = new Properties() + file('../../version.properties').withInputStream { appVersion.load(it) } namespace "com.ilusion.toldoconjunto" compileSdk rootProject.ext.compileSdkVersion defaultConfig { applicationId "com.ilusion.toldoconjunto" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 1 - versionName "1.0" + versionCode appVersion.getProperty('versionCode').toInteger() + versionName appVersion.getProperty('versionName') testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" aaptOptions { // Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps. diff --git a/apps/toldo-app/package-lock.json b/apps/toldo-app/package-lock.json index 8fbb091..9472ac6 100644 --- a/apps/toldo-app/package-lock.json +++ b/apps/toldo-app/package-lock.json @@ -1,12 +1,12 @@ { "name": "toldo-app", - "version": "0.0.1", + "version": "0.0.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "toldo-app", - "version": "0.0.1", + "version": "0.0.2", "dependencies": { "@capacitor/android": "^6.2.1", "@capacitor/core": "^6.2.1", diff --git a/apps/toldo-app/package.json b/apps/toldo-app/package.json index b2a1df2..9f82267 100644 --- a/apps/toldo-app/package.json +++ b/apps/toldo-app/package.json @@ -1,7 +1,7 @@ { "name": "toldo-app", "private": true, - "version": "0.0.1", + "version": "0.0.2", "type": "module", "scripts": { "dev": "vite", diff --git a/apps/toldo-app/src/__tests__/critical-flow.test.ts b/apps/toldo-app/src/__tests__/critical-flow.test.ts index 7307559..add27db 100644 --- a/apps/toldo-app/src/__tests__/critical-flow.test.ts +++ b/apps/toldo-app/src/__tests__/critical-flow.test.ts @@ -2,6 +2,11 @@ import { describe, expect, it } from 'vitest'; import { ExportImportService } from '@toldo/services'; describe('contratos de operación y respaldo', () => { + it('expone la versión actual en las exportaciones', () => { + const result = new ExportImportService().exportAll({ productores: [], productos: [], movimientosInventario: [], ventas: [], ventaLineas: [], gastos: [], ajustes: [], cuadres: [] }); + expect(result.appVersion).toBe('0.0.2'); + }); + it('exporta jornadas junto con los datos operativos', () => { const service = new ExportImportService(); const result = service.exportAll({ diff --git a/apps/toldo-app/version.properties b/apps/toldo-app/version.properties new file mode 100644 index 0000000..4f85f6c --- /dev/null +++ b/apps/toldo-app/version.properties @@ -0,0 +1,2 @@ +versionName=0.0.2 +versionCode=2 diff --git a/openspec/changes/standardize-app-version/.openspec.yaml b/openspec/changes/standardize-app-version/.openspec.yaml new file mode 100644 index 0000000..7ccf7c3 --- /dev/null +++ b/openspec/changes/standardize-app-version/.openspec.yaml @@ -0,0 +1,2 @@ +schema: spec-driven +created: 2026-10-25 diff --git a/openspec/changes/standardize-app-version/design.md b/openspec/changes/standardize-app-version/design.md new file mode 100644 index 0000000..539e10e --- /dev/null +++ b/openspec/changes/standardize-app-version/design.md @@ -0,0 +1,23 @@ +# Design + +## Context + +La APK usa `versionCode 1` y `versionName 1.0`, mientras npm y exportaciones usan `0.0.1`. Android requiere `versionCode` creciente para actualizar una instalación existente. + +## Goals / Non-Goals + +**Goals:** mantener una versión legible y un código Android monotónico, conservando `com.ilusion.toldoconjunto`. + +**Non-Goals:** cambiar la firma de la APK, el package id o el esquema de datos. + +## Decisions + +- Usar `apps/toldo-app/version.properties` como fuente compartida simple (`versionName`, `versionCode`). +- Gradle leerá directamente ese archivo. +- npm y el servicio de exportación reflejarán la misma versión durante esta POC. +- Incrementar `versionCode` sólo cuando se publique una nueva APK. + +## Risks / Trade-offs + +- Los valores JSON/package no son consumidos automáticamente por Gradle -> una prueba comprobará que coinciden con `version.properties`. +- Instalar una APK firmada con otra clave seguirá requiriendo desinstalación -> se mantiene la clave de debug para builds debug y se documenta la necesidad de conservar la clave release. diff --git a/openspec/changes/standardize-app-version/proposal.md b/openspec/changes/standardize-app-version/proposal.md new file mode 100644 index 0000000..40bdb10 --- /dev/null +++ b/openspec/changes/standardize-app-version/proposal.md @@ -0,0 +1,28 @@ +# Proposal + +## Why + +La aplicación usa versiones distintas o hardcodeadas entre npm, Android y las exportaciones. Esto dificulta instalar actualizaciones sobre una APK existente y mantener trazabilidad de los respaldos. + +## What Changes + +- Definir `versionName` y `versionCode` en un archivo versionado compartido. +- Usar esos valores en Gradle, npm y exportaciones JSON. +- Publicar la siguiente versión como `0.0.2` con `versionCode 2`. +- Validar el `applicationId` y la versión en el APK generado. + +## Capabilities + +### New Capabilities + +- `app-versioning`: versionado consistente para web, exportaciones y Android. + +### Modified Capabilities + +- Ninguna. + +## Impact + +- `apps/toldo-app`: configuración npm y Android. +- `packages/services`: metadato de exportación. +- Build APK y pruebas de versionado. diff --git a/openspec/changes/standardize-app-version/specs/app-versioning/spec.md b/openspec/changes/standardize-app-version/specs/app-versioning/spec.md new file mode 100644 index 0000000..331f452 --- /dev/null +++ b/openspec/changes/standardize-app-version/specs/app-versioning/spec.md @@ -0,0 +1,22 @@ +# Spec Delta + +## Purpose + +Asegura que cada actualización de ToldoConjunto pueda identificarse y actualizar una instalación Android existente sin conflictos causados por códigos de versión repetidos o decrecientes. + +## ADDED Requirements + +### Requirement: Versionado consistente +The system SHALL expose the same semantic version in npm metadata, exported data, and Android versionName. + +#### Scenario: Version 0.0.2 +- **WHEN** the app is built +- **THEN** npm and exported data report `0.0.2` +- **AND** Android reports versionName `0.0.2` and versionCode `2` + +### Requirement: Identidad Android estable +The system SHALL preserve the application id `com.ilusion.toldoconjunto` across releases. + +#### Scenario: Actualización instalada +- **WHEN** a newer APK is installed with the same signing key +- **THEN** Android recognizes it as an update to the existing application diff --git a/openspec/changes/standardize-app-version/tasks.md b/openspec/changes/standardize-app-version/tasks.md new file mode 100644 index 0000000..5af406c --- /dev/null +++ b/openspec/changes/standardize-app-version/tasks.md @@ -0,0 +1,12 @@ +# Tasks + +## 1. Versionado + +- [x] 1.1 Crear la fuente compartida con `versionName=0.0.2` y `versionCode=2`, y actualizar npm/exportaciones +- [x] 1.2 Configurar Gradle para leer la fuente compartida y conservar el applicationId +- [x] 1.3 Añadir test que compruebe versionado y compatibilidad de exportación + +## 2. Verificación + +- [x] 2.1 Ejecutar tests y build web +- [x] 2.2 Generar APK debug y verificar package id, versionName y versionCode diff --git a/packages/services/src/export-import/ExportImportService.ts b/packages/services/src/export-import/ExportImportService.ts index 9b6fdfc..ff3477f 100644 --- a/packages/services/src/export-import/ExportImportService.ts +++ b/packages/services/src/export-import/ExportImportService.ts @@ -19,7 +19,7 @@ export interface ExportData { } export const CURRENT_SCHEMA_VERSION = 1; -export const APP_VERSION = '0.0.1'; +export const APP_VERSION = '0.0.2'; export class ExportImportService { exportAll(data: ExportData['data']): ExportData {