diff --git a/CLAUDE.md b/CLAUDE.md index 369be5f..2f5e6d3 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -26,9 +26,9 @@ PATH=/mnt/cello2/arno/re/recode/zig/zig-0.15.2/zig-x86_64-linux-0.15.2:$PATH zig | Campo | Valor | |-------|-------| | **Nombre** | zcatconfig | -| **Version** | v0.1.0 | +| **Version** | v0.2.1 | | **Fecha inicio** | 2025-12-17 | -| **Estado** | EN DESARROLLO - Estructura inicial | +| **Estado** | FUNCIONAL - Integrado en zsimifactu | | **Lenguaje** | Zig 0.15.2 | | **Dependencias** | Ninguna (Zig puro) | @@ -36,10 +36,12 @@ PATH=/mnt/cello2/arno/re/recode/zig/zig-0.15.2/zig-x86_64-linux-0.15.2:$PATH zig **zcatconfig** es una libreria para gestion de configuracion declarativa: - Definicion de variables con metadatos (tipo, default, descripcion, categoria) -- Generacion automatica de struct Config via comptime -- Persistencia a archivo de texto legible -- Validacion de valores +- Persistencia a archivo de texto legible con comentarios +- Validacion de valores (rangos, enums, tipos) - Sistema Get/Set generico con inline for + @field +- **ConfigManager**: Gestor autonomo con observers y auto-save +- **FileWatcher**: Detecta cambios en archivo via mtime (hot-reload) +- **loadFromString**: Carga config desde string embebido --- @@ -169,20 +171,75 @@ PATH=/mnt/cello2/arno/re/recode/zig/zig-0.15.2/zig-x86_64-linux-0.15.2:$PATH zig ## PLAN DE TRABAJO -### Fase 1: Estructura base - COMPLETADA +### Fase 1: Estructura base ✅ - [x] Crear proyecto (build.zig, CLAUDE.md) - [x] Extraer types.zig de zsimifactu - [x] Adaptar engine.zig (parametrizar variables y Config) - [x] Adaptar persistence.zig -### Fase 2: Generalizacion - COMPLETADA +### Fase 2: Generalizacion ✅ - [x] Engine generico con comptime -- [x] Tests unitarios (9 tests) +- [x] Tests unitarios - [x] Documentacion API -### Fase 3: Integracion - EN PROGRESO -- [ ] Integrar en zsimifactu como dependencia -- [ ] Verificar que zsimifactu funciona igual +### Fase 3: Integracion ✅ +- [x] Integrar en zsimifactu como dependencia +- [x] Verificar que zsimifactu funciona igual + +### Fase 4: ConfigManager ✅ +- [x] ConfigManager con loadOrCreate, auto-save, observers +- [x] Sistema de observers con contexto +- [x] isDirty tracking + +### Fase 5: FileWatcher + Utils ✅ +- [x] FileWatcher para hot-reload (mtime polling) +- [x] loadFromString para defaults embebidos +- [x] updateMtime para evitar auto-detectar cambios propios + +--- + +## API PRINCIPAL + +### ConfigManager (gestor autonomo) + +```zig +const zcatconfig = @import("zcatconfig"); + +// Crear ConfigManager tipado +const MyConfigManager = zcatconfig.ConfigManager(&variables, MyConfig, "mi_app"); + +// Inicializar (carga o crea archivo) +var manager = try MyConfigManager.init(allocator, "config.txt"); +defer manager.deinit(); // Auto-save si dirty + +// Acceso +const cfg = manager.getConfig(); +try manager.set("@mi_variable", "nuevo_valor"); + +// Observers +manager.addObserver(myCallback, my_context); +``` + +### FileWatcher (hot-reload) + +```zig +var watcher = zcatconfig.FileWatcher.init("config.txt", 1000); // check cada 1s + +// En main loop: +if (watcher.checkForChanges()) { + // Recargar configuracion +} + +// Despues de guardar: +watcher.updateMtime(); // Evitar detectar nuestro propio cambio +``` + +### loadFromString (defaults embebidos) + +```zig +const defaults = @embedFile("defaults.txt"); +zcatconfig.loadFromString(&variables, Config, &config, defaults); +``` --- @@ -197,4 +254,6 @@ PATH=/mnt/cello2/arno/re/recode/zig/zig-0.15.2/zig-x86_64-linux-0.15.2:$PATH zig | Fecha | Version | Cambios | |-------|---------|---------| -| 2025-12-17 | v0.1.0 | Proyecto creado, estructura inicial | +| 2025-12-18 | v0.2.1 | FileWatcher, loadFromString, updateMtime | +| 2025-12-17 | v0.2.0 | ConfigManager con observers, auto-save, isDirty | +| 2025-12-17 | v0.1.0 | Proyecto creado, Engine + persistence |