Fue una sesión de doble error. Dos problemas no relacionados conspiraban para hacer que la aplicación de tareas pareciera rota: las entidades aparecían en orden aleatorio después de actualizar, y las funciones de formato de tiempo no devolvían nada en las plantillas.
Error uno: La base de datos ZeroCore almacenaba entidades en un HashMap, que no proporciona garantías de ordenamiento. La corrección añadió un paso de ordenamiento: entities.sort_by_key(|e| (e.created_at, e.id)).
Error dos: La función eval_expr_with_scope() del renderizador no manejaba Expr::Call. Las llamadas a funciones caían en la rama catch-all y devolvían None. Se añadió evaluación de llamadas a funciones al renderizador para funciones integradas, junto con acceso a campos internos de entidades (id, created_at, updated_at, version, etc.).
La combinación de estos dos errores creaba una experiencia confusa donde todo parecía fundamentalmente roto, cuando en realidad la persistencia era perfecta -- los errores estaban en la presentación (ordenamiento) y el renderizado (llamadas a funciones).
Esta es la Parte 167 de la serie "Cómo construimos FLIN", que documenta cómo un CEO en Abidjan y un CTO de IA diseñaron y construyeron un lenguaje de programación desde cero.
Navegación de la serie: - [166] El error del método .get() de entidades - [167] Errores de ordenamiento de entidades y formato de tiempo (estás aquí) - [168] Corrección de valores predeterminados de entidades y alternador