El parser de líneas de configuración requería 2 espacios antes del
comentario (` #`), pero el formato estándar usa 1 espacio (` #`).
Esto causaba que valores como "GrisBorde # color placeholder" no
se parsearan correctamente, incluyendo el comentario en el valor.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Bug: "-100-100" se parseaba como ["", "100", "100"] con splitScalar
Fix: Buscar el separador '-' que NO está al inicio del string
Ejemplos que ahora funcionan:
- "-100-100" → min=-100, max=100
- "-50-50" → min=-50, max=50
- "0-100" → min=0, max=100 (sin cambio)
Test añadido para rangos negativos.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Nueva función initDeferred() que NO carga/crea archivo automáticamente
- Útil cuando se necesita verificar BD antes de decidir qué cargar
- init() mantiene comportamiento original (loadOrCreate automático)
- Permite arquitectura 3 fuentes: Archivo > BD > Defaults
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- FileWatcher: Observa archivo para detectar cambios via mtime
- Intervalo configurable entre verificaciones
- reset() y updateMtime() para control manual
- loadFromString(): Carga config desde string (para defaults embebidos)
- Tests para ambas funcionalidades
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Problema: Al recargar config, los strings asignados apuntaban al buffer
de contenido del archivo que se liberaba con defer al final de load().
Esto causaba segfaults al acceder a los valores después.
Solución: Usar dupeString() o allocator.dupe() para crear copias
independientes de los strings antes de asignarlos a la config.
Afecta tipos .string, .string_array y .color (cuando el campo es []const u8).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Añade ConfigManager que maneja automáticamente:
- Carga/creación de archivo config (loadOrCreate)
- Auto-guardado en deinit si hay cambios pendientes
- Sistema de observers con contexto para sincronización externa
Cambios:
- ConfigManager(variables, ConfigType, app_name) type
- Observer con contexto: fn(change, config, ctx) void
- addObserver(callback, context) para registrar listeners
- Métodos: get, set, getConfig, getConfigMut, markDirty, isDirty
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Libreria para gestion de configuracion con:
- Definicion declarativa de variables (ConfigVariable)
- Engine generico con comptime (inline for + @field)
- Persistencia a archivo texto legible
- Validacion de valores (rangos, tipos)
- Soporte: boolean, integer, float, string, color
Extraido y generalizado de zsimifactu/src/config/
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>